当我在文件夹中有子文件夹时--这个代码不是删除文件夹......有什么错误吗?
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;
6条答案
按热度按时间gab6jxml1#
最简单的方法是调用
TDirectory.Delete(Dir, True)
。TDirectory
在IOUtils
中找到,这是最近添加的RTL。True
标志被传递给Recursive
参数,这意味着在删除目录之前目录的内容被占用,这是删除目录的基本部分。在一个评论中,你告诉我们你使用 Delphi 7,所以这不能使用。
您的代码看起来基本正常。但是,您的意思不是:
我想你的意思是:
我可能会这样写:
snvhrwxg2#
如果我是你,我会告诉操作系统删除这个文件夹及其所有内容。
[If你有
相反,您会看到一个很好的确认对话框。如果您这样做
您不会看到确认对话框,但是如果操作时间很长,您会看到进度条。最后,如果添加
FOF_ALLOWUNDO
标志,您可以将目录移动到回收站,而不是永久删除它。当然,您可以根据需要合并标志:
不会显示任何确认信息(但会显示一个进度对话框,因为您没有指定
FOF_NO_UI
),目录将被移到回收站,而不会被永久删除。]xxb16uws3#
上一次我需要删除包含内容的文件夹时,我使用了JCL:
最后一个参数告诉文件是否应该进入回收站,这是一个很好的奖励。
4ioopgfo4#
要解决原来的问题-请尝试以下操作:
x9ybnkn65#
DSiWin32是一个开放源代码项目,以“按需使用”许可证发布。
ryoqjall6#
2022年:第一季第一集:)