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

时间:2015-06-03 15:59:54

标签: vba fso

我桌面上有几个文件夹,暂时用于宏。现在,我想删除它们。一个是.zip,一个是常规文件夹。

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

以上代码可以正常运行。删除non.zip文件夹没有问题。但是,这不会删除文件:

On Error GoTo 0
fso.DeleteFolder zipPath, True

MSDN documentation相反,这也不会产生错误。经过太多时间,我意识到我只需要使用DeleteFile作为.zip,因为显然.zip在技术上是一个文件,而不是文件夹。然后成功删除这两个项目。

它现在有效,但我仍然有点困惑,为什么使用DeleteFolder没有产生错误。上述文件指定

  

如果找不到匹配的文件夹,则会发生错误。

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

只是一个好奇的灵魂徘徊在VBA的领域......

1 个答案:

答案 0 :(得分:1)

此行为不仅限于.ZIP文件(压缩文件夹实际上是这些文件)。有趣的是,DeleteFile方法在尝试删除现有文件夹时不会抛出错误,并且DeleteFolder方法在尝试删除现有文件时不会出错。我遇到错误的唯一方法是指定一个不存在的文件/文件夹名称。

是的,看来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