4

ディレクトリ内のすべてのファイル(サブディレクトリを除く)を削除するvb6関数を誰かが手伝ってくれるかどうか疑問に思いました。

4

4 に答える 4

9

1行、VB6ステートメントKillを使用

Kill "c:\doomed_dir\*.*"

ヘルプトピックには、「Microsoft Windowsでは、Killは複数のファイルを指定するための複数文字(*)および単一文字(?)のワイルドカードの使用をサポートしています」と書かれています。

余談ですが、私はMicrosoft Scripting Runtime(FileSystemObjectを含む)を避けたいと思っています。私の経験では、おそらくユーザーのIT部門がウイルスに偏執的であるために、ユーザーのマシンで壊れることがあります。

于 2009-09-23T16:20:11.740 に答える
4

私はこれがうまくいくと信じています:

Dim oFs As New FileSystemObject
Dim oFolder As Folder
Dim oFile As File

If oFs.FolderExists(FolderSpec) Then
    Set oFolder = oFs.GetFolder(FolderSpec)

    'caution!
    On Error Resume Next

    For Each oFile In oFolder.Files
        oFile.Delete True 'setting force to true will delete a read-only file
    Next

    DeleteAllFiles = oFolder.Files.Count = 0
End If

End Function
于 2009-09-23T15:36:49.353 に答える
2

すべてのシナリオをテストしたわけではありませんが、機能するはずです。すべてのファイルが削除され、ファイルがロックされているか、アクセス権がない場合は、エラー70がキャッチされ、[中止]、[再試行]、または[無視]ボックスが表示されます。

Sub DeleteAllFilesInDir(ByVal pathName As String)
  On Error GoTo errorHandler
  Dim fileName As String
  If Len(pathName) > 0 Then
    If Right(pathName, 1) <> "\" Then pathName = pathName & "\"
  End If
  fileName = Dir(pathName & "*")

  While Len(fileName) > 0
    Kill pathName & fileName
    fileName = Dir()
  Wend

  Exit Sub
errorHandler:
  If Err.Number = 70 Then
    Select Case MsgBox("Could not delete " & fileName & ". Permission denied. File may be open by another user or otherwise locked.", vbAbortRetryIgnore, "Unable to Delete File")
      Case vbAbort:
        Exit Sub
      Case vbIgnore:
        Resume Next
      Case vbRetry:
        Resume
    End Select
  Else
    MsgBox "Error deleting file " & fileName & ".", vbOKOnly Or vbCritical, "Error Deleting File"
  End If
End Sub
于 2009-09-23T15:43:13.827 に答える
1

スクリプトランタイムのFileSystemObjectのDeleteFileメソッドもワイルドカードをサポートしているように見えます。これは私にとってはうまくいくからです。

Dim fs As New Scripting.FileSystemObject
fs.Deletefile "C:\Temp\*.jpg", true

このアプローチは、@ Corazuによって提案されたアプローチよりも制御が不十分ですが、場合によってはある程度の有用性がある可能性があります。

于 2013-01-21T18:31:08.620 に答える