用API删除文件的问题,急死人了
想用api函数删除文件,因为kill 不能放在回收站中
用SHFileOPeration 函数,提示 找不到dll入口点,SHFileOPerationA in shell32.dll
我的各种声明应该是没问题的(复制vbapi工具的)哪位老大用过这个函数,请指点迷津
问题点数:100、回复次数:9Top
1 楼zsoft(老曾)回复于 2005-01-09 11:59:55 得分 0
我用的是win2003,应该跟操作系统没关系吧Top
2 楼zsoft(老曾)回复于 2005-01-09 12:02:01 得分 0
我用这个dshell32的shellexecute都可以调用Top
3 楼yingxiangchen(Ivan)回复于 2005-01-09 12:04:42 得分 50
Option Explicit
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As ToBin) As Long
Private Type ToBin
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long
End Type
Const FO_DELETE = &H3
Const FOF_ALLOWUNDO = &H40
Const SHERB_NORMAL = &H0
'删除文件到回收站
Private Sub Command1_Click()
Dim Go As ToBin
Dim strFile As String
With CommonDialog1
.Filter = "('.bak)|'.bak"
.DialogTitle = "ɾ³ýÎļþ"
.ShowOpen
strFile = .FileName
End With
With Go
.wFunc = FO_DELETE
.pFrom = strFile
.fFlags = FOF_ALLOWUNDO
End With
SHFileOperation Go
End SubTop
4 楼pcwak()回复于 2005-01-09 12:08:03 得分 20
少了下面这个类型
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End TypeTop
5 楼dongge2000(目前叫西西了)回复于 2005-01-09 12:15:30 得分 0
UPTop
6 楼dongle2001(dl)回复于 2005-01-09 15:19:21 得分 0
.Filter = "('.bak)|'.bak"改成.Filter = "(*.bak)|*.bak"
别的部分没问题,检查shell32.dll,有可能是版本不对Top
7 楼tztz520(午夜逛街)回复于 2005-01-09 15:36:52 得分 30
Private Const FO_DELETE = &H3 ' 删除
Private Const FOF_ALLOWUNDO = &H40 ' 移入回收站
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 Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Sub command1_click()
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
.wFunc = FO_DELETE
.pFrom = "f:\abc\ddd.txt"
.fFlags = FOF_ALLOWUNDO
End With
SHFileOperation SHFileOp
End SubTop
8 楼zsoft(老曾)回复于 2005-01-09 16:31:30 得分 0
诸位老大,是提示:找不到dll入口点,SHFileOPerationA in shell32.dll
意思好象是,在我 shell21.dll 里,没有shfileoperationA 这个函数,难道真的是win2003 有不同吗Top
9 楼zsoft(老曾)回复于 2005-01-09 16:36:12 得分 0
哈哈,在问专家里找到答案
这是VB的BUG,VB5和VB6都有这个问题。
将声明中SHFileOperationA前面的空格删除就可以了。
Top




