说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何把文件删除到回收站?

编辑:说三道四文库 发布时间:2018-08-19 05:23
HTML文档下载 WORD文档下载 PDF文档下载
//我的网上找到这样的代码:

program del;
uses ShellApi;
{ 利用ShellApi中: function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall; }
Var T:TSHFileOpStruct;
P:String;
begin
P:='C:\Windows\System\EL_CONTROL.CPL';
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
End;
SHFileOperation(T);
End.

注意:
1. 给出文件的绝对路径名,否则可能不能恢复;
2. MS的文档说对于多个文件,每个文件名必须被#)字符分隔,而整个字符串必须用两个#0结束。


//但是程序执行到SHFileOperation(T);时就出错了,谁有能用的代码?
P:='C:\Windows\System\EL_CONTROL.CPL';
改为
P:='C:\Windows\System\EL_CONTROL.CPL'#0;
试试。
前面那个只有一个默认的#0
加#0应该没有作用,PChar的类型转换会自动加上这个#0的。

改成 P:='C:\\Windows\\System\\EL_CONTROL.CPL' 试试。
jadeluo: 没看清楚?这个函数需要两个#0结尾。String中本来就有一个#0的,写上#0,Delphi会在它后面再加一个#0,你可以在调试器中观察。'C:\\Windows\\System\\EL_CONTROL.CPL'是 C/C++/Java 的写法,Delphi中用不着。因为在 C/C++/Java 中,‘\’是转义符。
谢谢 agui(阿贵: 高级图形用户界面) 的提醒
function TForm1.DelToRecycled(FileName: string): Boolean;
var f:tshfileopstruct;
begin
  fillchar(f,sizeof(f),#0);
  f.Wnd:=application.Handle;
  f.wFunc:=FO_DELETE;
  f.pFrom:=PChar(filename);
  f.pTo:=nil;
  f.fAnyOperationsAborted:= False;
  f.hNameMappings:= Nil;
  f.lpszProgressTitle:= Nil;
  f.fFlags:={FOF_SILENT or }FOF_ALLOWUNDO{ or FOF_NOCONFIRMATION};
  result:=(shfileoperation(f)=0);
end;
ly_liuyang: 其实楼主已经知道用法,关键是为什么“程序执行到SHFileOperation(T);时就出错了”?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘