我正在编写一个VBA应用程序,它涉及递归循环大量目录。我正在使用FindFirstFile API来实现这一点,因为它提供了超过FileSystemObject的显着性能提升。
为了完全从我的代码中删除FSO,我需要一个例程来删除文件。这让DeleteFile引起了我的注意。虽然我有它工作 - 请参阅下面的代码 - 它向用户显示警告,询问他们是否要删除该文件。我需要删除此警报,就像FSO一样。 Application.DisplayAlerts = False在这个实例中不起作用 - 很可能是因为它是一个API调用。
有没有办法删除警报?
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Private Const FO_DELETE = &H3
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Sub TestDelete()
Dim SHDirOp As SHFILEOPSTRUCT
With SHDirOp
.wFunc = FO_DELETE
'.pFrom is file to be deleted, copied, or moved should be
.pFrom = "My Path Here"
'you might also look at adding
End With
'struct (Type) is now properly initialized
'call the function
SHFileOperation SHDirOp
End Sub
答案 0 :(得分:0)
您需要考虑几个SHFILEOPSTRUCT.fFlags选项。您要求FOF_NOCONFIRMATION
和& H10。你可能想要更多,比如FOF_ALLOWUNDO,FOF_SILENT,FOF_NOERRORUI,这个问题并不清楚。检查the docs。