怎样避免SHFileOperation出现错误(文件删除到回收站的问题)(100分)

  • 主题发起人 主题发起人 Lamb
  • 开始时间 开始时间
L

Lamb

Unregistered / Unconfirmed
GUEST, unregistred user!
我要删除多个文件到回收站,删除的代码很多页面和网站都有。但是,如果我要删除的目前<br>正在被其他其他程序使用,SHFileOperation总是出现错误,而删除没有使用的文件则没有<br>问题。我尝试写了一段代码检查文件是否被使用,如下:<br>function IsFileInUse(fName:string):boolean;<br>var <br>&nbsp; HFileRes : HFILE; <br>begin <br>&nbsp; Result := false; <br>&nbsp; if not FileExists(fName) then <br>&nbsp; &nbsp; exit; <br>&nbsp; HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0); <br>&nbsp; Result := (HFileRes = INVALID_HANDLE_VALUE); <br>&nbsp; if not Result then <br>&nbsp; &nbsp; CloseHandle(HFileRes); <br>end;<br>可是依然不能避免SHFileOperation出现错误,怎么办呢?我试了很多方式,例如在删除每<br>一个文件是使用try...except来容错等都没有作用。不知道谁能够帮助我。
 
procedure TForm1.Button1Click(Sender: TObject);<br>Var<br>&nbsp; T:TSHFileOpStruct;<br>&nbsp; P:String;<br>begin<br>&nbsp; P:='d:/address';//这里改成你要删除的任意目录名<br>&nbsp; With T do<br>&nbsp; Begin<br>&nbsp; &nbsp; Wnd:=0;<br>&nbsp; &nbsp; wFunc:=FO_DELETE;<br>&nbsp; &nbsp; pFrom:=Pchar(P);<br>&nbsp; &nbsp; pTo:=nil;<br>&nbsp; &nbsp; fFlags:=FOF_ALLOWUNDO+FOF_NOCONFIRMATION+FOF_NOERRORUI;<br>&nbsp; &nbsp; //标志表明允许恢复,无须确认&lt;font color=red&gt;并不显示出错信息&lt;/font&gt;<br>&nbsp; &nbsp; hNameMappings:=nil;<br>&nbsp; &nbsp; lpszProgressTitle:='正在删除文件夹';<br>&nbsp; &nbsp; fAnyOperationsAborted:=False;<br>&nbsp; End;<br>&nbsp; SHFileOperation(T);<br>end;<br>
 
谢谢,搞定了。
 

Similar threads

后退
顶部