使用VBA,我该怎么做:
测试文件是否存在,如果存在,
删除它?
Onorio Caten.. 159
1.)点击这里.基本上这样做:
Function FileExists(ByVal FileToTest As String) As Boolean FileExists = (Dir(FileToTest) <> "") End Function
我会留给你找出所需的各种错误处理,但这些都是我正在考虑的错误处理事项之一:
检查传递的空字符串.
检查包含文件名/路径中非法字符的字符串
2.)如何删除文件.看看这个. 基本上使用Kill命令,但您需要允许文件是只读的.这是给你的功能:
Sub DeleteFile(ByVal FileToDelete As String) If FileExists(FileToDelete) Then 'See above ' First remove readonly attribute, if set SetAttr FileToDelete, vbNormal ' Then delete the file Kill FileToDelete End If End Sub
再次,我将把错误处理留给你,这些是我要考虑的事情:
对于目录与文件,这种行为应该不同吗?用户是否必须明确表示要删除目录?
您是否希望代码自动重置只读属性,或者是否应该向用户提供某种指示,即只设置了只读属性?
编辑:将此答案标记为社区维基,以便任何人都可以根据需要进行修改.
1.)点击这里.基本上这样做:
Function FileExists(ByVal FileToTest As String) As Boolean FileExists = (Dir(FileToTest) <> "") End Function
我会留给你找出所需的各种错误处理,但这些都是我正在考虑的错误处理事项之一:
检查传递的空字符串.
检查包含文件名/路径中非法字符的字符串
2.)如何删除文件.看看这个. 基本上使用Kill命令,但您需要允许文件是只读的.这是给你的功能:
Sub DeleteFile(ByVal FileToDelete As String) If FileExists(FileToDelete) Then 'See above ' First remove readonly attribute, if set SetAttr FileToDelete, vbNormal ' Then delete the file Kill FileToDelete End If End Sub
再次,我将把错误处理留给你,这些是我要考虑的事情:
对于目录与文件,这种行为应该不同吗?用户是否必须明确表示要删除目录?
您是否希望代码自动重置只读属性,或者是否应该向用户提供某种指示,即只设置了只读属性?
编辑:将此答案标记为社区维基,以便任何人都可以根据需要进行修改.
对Brettski的答案进行编码的另一种方法可能是完全同意的
With New FileSystemObject If .FileExists(yourFilePath) Then .DeleteFile yourFilepath End If End With
相同的效果但更少(好吧,根本没有)变量声明.
FileSystemObject是一个非常有用的工具,非常值得友好.除了其他任何东西,对于文本文件编写,它实际上有时可能比传统的替代方案更快,这可能会让一些人感到惊讶.(至少根据我的经验,YMMV).
我可能会因此而受到抨击,但如果您要删除它,那么测试存在的重点是什么?我的一个主要的烦恼是一个应用程序抛出一个错误对话框,如"无法删除文件,它不存在!"
On Error Resume Next aFile = "c:\file_to_delete.txt" Kill aFile On Error Goto 0 return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.
如果文件首先不存在,任务就完成了!
以下内容可用于测试文件是否存在,然后将其删除.
Dim aFile As String aFile = "c:\file_to_delete.txt" If Len(Dir$(aFile)) > 0 Then Kill aFile End If
在VB中它通常Dir
会找到该文件的目录.如果它不是空白则存在然后用于Kill
删除文件.
test = Dir(Filename) If Not test = "" Then Kill (Filename) End If
设置对Scripting.Runtime库的引用,然后使用FileSystemObject:
Dim fso as New FileSystemObject, aFile as File if (fso.FileExists("PathToFile")) then aFile = fso.GetFile("PathToFile") aFile.Delete End if