删除VB6目录中的所有文件

4

我想知道是否有人能够帮我编写一个VB6函数,该函数可以删除目录中的所有文件(不包括子目录)。

4个回答

9

使用VB6语句Kill可以在一行中完成操作。

Kill "c:\doomed_dir\*.*"

帮助主题中提到:“在Microsoft Windows中,Kill支持使用多个字符(*)和单个字符(?)通配符来指定多个文件”。

另外,我更喜欢避免使用Microsoft Scripting Runtime(包括FileSystemObject)。根据我的经验,它在用户计算机上偶尔会出现故障,可能是因为他们的IT部门对病毒非常警惕。


我总是把事情搞得太复杂了..我应该记住这一点。 - Corazu
1
在Access 2000中,如果该目录中有一个文件被锁定(或打开),使用Kill命令和“*.*”通配符将失败。 - Spidermain50

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

我在“Dim oFs As New FileSystemObject”处遇到了“用户定义的类型未定义”的错误。 - zSynopsis
这是因为您需要添加对 FileSystemObject 的引用才能使用它。但我不记得确切的引用名称是什么。 - Corazu
要使用FileSystemObject,您必须在项目引用对话框中为您的项目选择Microsoft Scripting运行时。 - Alex
1
不需要迭代文件。FileSystemObject的DeleteFile方法将接受通配符。 - B H

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

我表示同情,因为我认为这不应该被评为-1。虽然“Kill”&pathname&“\ * . *”肯定更短。 - MarkJ

1
似乎脚本运行时的FileSystemObject的DeleteFile方法也支持通配符,因为这对我有效:
Dim fs As New Scripting.FileSystemObject
fs.Deletefile "C:\Temp\*.jpg", true

这种方法比@Corazu建议的方法控制力较弱,但在某些情况下可能有一定的实用性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接