使用DeleteFile API时删除警报

时间:2015-06-22 09:09:38

标签: vb.net vba api

我正在编写一个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

1 个答案:

答案 0 :(得分:0)

您需要考虑几个SHFILEOPSTRUCT.fFlags选项。您要求FOF_NOCONFIRMATION和& H10。你可能想要更多,比如FOF_ALLOWUNDO,FOF_SILENT,FOF_NOERRORUI,这个问题并不清楚。检查the docs