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
我的桌面上有几个临时用于宏的文件夹。现在,我想删除它们。一个是 .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