删除文件夹的一个老问题,呵呵,在线等.

yseeysee 2003-08-18 03:17:34
怎样用API来删除文件夹及文件夹里的东西.
就像WINDOWS里的删除一样.
...全文
36 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxunicorn 2003-10-27
  • 打赏
  • 举报
回复
var
OpStruc: TSHFileOpStruct;
DelDir:string;
Begin

DelDir:='C:\Temp' ;
With OpStruc DO
Begin
Wnd:= Handle;
wFunc:= FO_DELETE;
pFrom:=pchar(DelDir);
//fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fFlags:= FOF_ALLOWUNDO ;
fAnyOperationsAborted:= False;
hNameMappings:= Nil;
lpszProgressTitle:= Nil;
end;
ShFileOperation( OpStruc );
end;
WWWWA 2003-08-18
  • 打赏
  • 举报
回复
放在p.fAnyOperationsAborted:=true;之后
WWWWA 2003-08-18
  • 打赏
  • 举报
回复
a:=shfileoperation(p);
上述代码少了一句, 我已测试通过
IORILI 2003-08-18
  • 打赏
  • 举报
回复
var Form1: TForm1;
rec_stack:array [1..30] of TSearchRec;
rec_pointer:integer;
Del_Flag:Boolean;


------------------------------------------------------------------ ------

procedure TForm1.DeleteTree(s:string);
VAR searchRec:TSearchRec;
begin
if FindFirst(s+'\*.*', faAnyFile, SearchRec)=0 then
repeat
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
if (SearchRec.Attr and faDirectory>0) then
begin
rec_stack[rec_pointer]:=SearchRec;
rec_pointer:=rec_pointer-1;
DeleteTree(s+'\'+SearchRec.Name);
rec_pointer:=rec_pointer+1;
SearchRec:=rec_stack[rec_pointer];
end
else
begin
try
FileSetAttr(s+'\'+SearchRec.Name,faArchive);
DeleteFile(s+'\'+SearchRec.Name);
except
Application.MessageBox(PChar('Delete File:'+s+'\'+SearchRec.Name+' Error!'),'Info',MB_OK);
Del_Flag:=False;
end;
end;
end;
until (FindNext(SearchRec)<>0);
FindClose(SearchRec);
if rec_pointer<30 then
begin
try
FileSetAttr(s,faArchive);
RemoveDir(s);
except
Application.MessageBox(PChar('Delete Directory:'+s+' Error!'),'Info',MB_OK);
Del_Flag:=False;
end;
end;
end;


---------------------------------------------------------

Del_Flag:=True;
rec_pointer:=30;
DeleteTree('c:\temp');
if Del_Flag then Application.MessageBox(PChar('目录c:\temp的内容已成功清除!'),'信息',MB_OK);
yseeysee 2003-08-18
  • 打赏
  • 举报
回复
那位大哥帮帮小弟啊。
yseeysee 2003-08-18
  • 打赏
  • 举报
回复
使用不对
yseeysee 2003-08-18
  • 打赏
  • 举报
回复
'f:\test'#0#0
后面的#0#0
是什么意思?
WWWWA 2003-08-18
  • 打赏
  • 举报
回复
uses ShellAPI
var
p:_shfileopstruct;
a:integer;
begin
p.Wnd:=handle;
p.wFunc:=FO_delete;
p.pFrom:='f:\test'#0#0; //删除f盘的test文件夹
p.pTo:=nil;
p.fFlags:=fof_noconfirmation;
p.fAnyOperationsAborted:=true;

end;

5,390

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧