4

我想知道是否有人可以帮助我使用 vb6 函数来删除目录中的所有文件(不包括子目录)。

4

4 回答 4

9

一行,使用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,该错误被捕获,并且您会得到一个 Abort、Retry 或 Ignore 框。

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 回答