FileSystemObject 的 DeleteFolder 方法不报错(MSDN 骗我)

DeleteFolder method of FileSystemObject Does Not Give an Error (MSDN lied to me)

我的桌面上有几个临时用于宏的文件夹。现在,我想删除它们。一个是 .zip 文件,一个是普通文件夹。

Set fso = CreateObject("scripting.filesystemobject")
fso.DeleteFolder unzipPath, True

以上代码运行无误。非 .zip 文件夹被删除没有问题。但是,这不会删除文件:

On Error GoTo 0
fso.DeleteFolder zipPath, True

MSDN documentation相反,这也不会产生错误。过了很久,我意识到我只需要对 .zip 使用 DeleteFile 因为显然 .zip 在技术上是一个文件,而不是一个文件夹。则两项删除成功

它现在可以工作了,但我仍然有点困惑为什么使用 DeleteFolder 没有产生错误。上述文档指定

An error occurs if no matching folders are found.

UPDATE:为了测试,我专门创建了一个独立的 sub 来测试 .zip 上的 DeleteFolder。 .zip 没有变化;没有错误返回;子刚刚结束。

只是一个好奇的灵魂在 VBA...

的领域游荡

此行为不限于 .ZIP 文件(这才是真正的压缩文件夹)。有趣的是,DeleteFile 方法在尝试删除现有文件夹时不会抛出错误,而 DeleteFolder 方法在尝试删除现有文件时不会抛出错误。我遇到错误的唯一方法是指定一个不存在的 file/folder 名称。


是的,看来 MSDN 是错误的。试试这个:

Sub IO_Error()
    Dim objFSO As FileSystemObject
    Dim strTempDir As String

    Set objFSO = New FileSystemObject
    strTempDir = Environ("Temp")
    Debug.Print strTempDir & "\IO Test"
    objFSO.CreateFolder strTempDir & "\IO Test"
    objFSO.CreateTextFile strTempDir & "\IO Test\IO Test.txt", True

    objFSO.DeleteFolder strTempDir & "\IO Test\IO Test.txt", True   'No errors
    objFSO.DeleteFile strTempDir & "\IO Test", True                 'No errors
    objFSO.DeleteFile strTempDir & "\IO Test\", True                'File not found error

End Sub