Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';是否删除此文件夹(VBA)?_Vba_File Io - Fatal编程技术网

为什么可以';是否删除此文件夹(VBA)?

为什么可以';是否删除此文件夹(VBA)?,vba,file-io,Vba,File Io,我创建了一个临时文件夹,稍后在程序中使用以下代码将其删除: 'Creates a new temporary directory path for a folder copy If dir("C:\\InventorTempFolder\\\", vbDirectory) = "" Then MkDir "C:\\InventorTempFolder\\\" SetAttr "C:\InventorTempFolder", vbNormal Els

我创建了一个临时文件夹,稍后在程序中使用以下代码将其删除:

    'Creates a new temporary      directory path for a folder copy
    If dir("C:\\InventorTempFolder\\\", vbDirectory) = "" Then       
MkDir "C:\\InventorTempFolder\\\"
SetAttr "C:\InventorTempFolder", vbNormal
    Else: MsgBox "This folder already exists."
    End If

(我不知道SetAttr是否正确……这是我问题的一部分!)

然后,我将此代码脱机,使用以下代码删除此文件夹中的所有文件和目录:

Sub DeleteDirectory()


Dim dir_name As String
Dim file_name As String
Dim files As Collection
Dim i As Integer
dir_name = "C:\\InventorTempFolder"

' Get a list of files it contains.
Set files = New Collection
file_name = dir$(dir_name & "\*.*", vbReadOnly + _
    vbHidden + vbSystem + vbDirectory)
Do While Len(file_name) > 0
    If (file_name <> "..") And (file_name <> ".") Then
        files.Add dir_name & "\" & file_name
    End If
    file_name = dir$()
Loop

' Delete the files.
For i = 1 To files.Count
    file_name = files(i)
    ' See if it is a directory.
If GetAttr(file_name) = vbDirectory Then
        Kill file_name
Else: Kill file_name
End If

Next i

' The directory is now empty. Delete it.
RmDir dir_name

' Remove the read-only flag if set.
' (Thanks to Ralf Wolter.)

End Sub
Sub-DeleteDirectory()
Dim dir_名称作为字符串
Dim文件名为字符串
将文件设置为集合
作为整数的Dim i
dir\u name=“C:\\InventorTempFolder”
'获取它包含的文件列表。
设置文件=新集合
file\u name=dir$(dir\u name&“\*.*”,vbReadOnly+_
vbHidden+vbSystem+vbDirectory)
Do While Len(文件名)>0
如果(文件名“.”)和(文件名“.”),则
文件。添加目录名和文件名
如果结束
文件名=目录$()
环
'删除文件。
对于i=1到文件。计数
文件名=文件(i)
'查看它是否是一个目录。
如果GetAttr(文件名)=vbDirectory,则
终止文件名
其他:杀死文件名
如果结束
接下来我
'目录现在为空。删除它。
RmDir目录名称
'删除只读标志(如果已设置)。
(多亏拉尔夫·沃尔特。)
端接头

但是,该目录不会删除。我的理论是,这是因为目录是只读文件夹。这就是为什么我试图将属性更改为vbNormal,但它不会更改。所以我想知道的问题是:

  • 为什么不删除呢?因为它是只读的,所以我的理论正确吗

  • 如果是,我该如何解决

  • 如果没有,还有什么不对



  • 提前谢谢

    脚本的结尾是:

    RmDir dir_name
    
    ' Remove the read-only flag if set.
    ' (Thanks to Ralf Wolter.)
    
    RmDir dir_name
    
    因此,您尝试删除同一目录两次。此时,
    dir\u name
    被设置为“SillyVBA”目录——当我测试它时,它确实被删除了。我假设第二个
    RmDir
    要删除“C:\InventorTempFolder”;当我测试它时,它也对我起作用

    根据评论更新

    该问题可能是由于您试图在文件类型为目录时使用
    Kill
    。要执行完全递归删除,您需要从树的底部开始,在向上运行时删除所有文件和空目录。但是,更简单的方法是使用FileSystemObject:

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.deletefolder dir_name
    

    这将一次性删除目录和其中的所有内容。

    Oops,不,这只是我尝试的其他内容留下的一个打字错误。它应该是“C:\InventorTempFolder”,第二个RmDir根本不应该在那里。我在最初的帖子中对它进行了编辑。你说这对你有用。。。。?我又试了一次,但没用……是的,对我有用。但我没有在其中创建任何子曲面。如果文件是目录,脚本将尝试使用
    Kill
    ;这行不通。如果您只想递归地删除目录中的所有内容,请使用:
    Set fso=CreateObject(“Scripting.FileSystemObject”)&fso.deletefolder dir\u name
    Sorry…什么?这有什么问题吗?它只是确保它检查所有的文件类型…不是吗?