当我在文件夹中有子文件夹时 – 此代码不是删除文件夹…是否有任何错误?
procedure TForm.Remove(Dir: String); var Result: TSearchRec; Found: Boolean; begin Found := False; if FindFirst(Dir + '\*',faAnyFile,Result) = 0 then while not Found do begin if (Result.Attr and faDirectory = faDirectory) AND (Result.Name <> '.') AND (Result.Name <> '..') then Remove(Dir + '\' + Result.Name) else if (Result.Attr and faAnyFile <> faDirectory) then DeleteFile(Dir + '\' + Result.Name); Found := FindNext(Result) <> 0; end; FindClose(Result); RemoveDir(Dir); end;
如果我是你,我只是告诉操作系统删除包含其所有内容的文件夹.通过编写(使用ShellAPI)
var ShOp: TSHFileOpStruct; begin ShOp.Wnd := Self.Handle; ShOp.wFunc := FO_DELETE; ShOp.pFrom := PChar('C:\Users\Andreas Rejbrand\Desktop\Test\'#0); ShOp.pTo := nil; ShOp.fFlags := FOF_NO_UI; SHFileOperation(ShOp);
[如果你这样做
ShOp.fFlags := 0;
相反,你得到一个很好的确认对话框.如果你这样做
ShOp.fFlags := FOF_NOCONFIRMATION;
你没有得到确认对话,但如果操作很长,你会得到一个进度条.最后,如果添加FOF_ALLOWUNDO标志,则将目录移动到Waste Bin而不是永久删除它.
ShOp.fFlags := FOF_ALLOWUNDO;
当然,您可以根据需要组合标志:
ShOp.fFlags := FOF_NOCONFIRMATION or FOF_ALLOWUNDO;
将不会显示任何确认(但由于您未指定FOF_NO_UI而显示进度对话框),该目录将被移动到垃圾箱而不会被永久删除.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。