为什么可以';是否删除此文件夹(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…什么?这有什么问题吗?它只是确保它检查所有的文件类型…不是吗?