如何解决如何在Delphi中递归删除空目录
父目录D:\ AAA有两个子目录D:\ AAA \ BB1和D:\ AAA \ BB2 我的要求是如何递归删除空目录。 这是互联网上的两个功能,如下所示: //递归删除空目录
function RemoveEmptyDirectory(path: string) : Boolean;
var
MySearch: TSearchRec;
Ended: Boolean;
begin
if FindFirst(path + '\*.*',faDirectory,MySearch) = 0 then
begin
repeat
if ((MySearch.Attr and faDirectory) = faDirectory) and
(MySearch.Name[1] <> '.') then
begin
if DirectoryIsEmpty(path + '\' + MySearch.Name) then
TDirectory.Delete(path + '\' + MySearch.Name)
else
begin
RemoveEmptyDirectory(path + '\' + MySearch.Name);
if DirectoryIsEmpty(path + '\' + MySearch.Name) then
RemoveEmptyDirectory(path + '\' + MySearch.Name);
end;
end;
until FindNext(MySearch) <> 0;
FindClose(MySearch);
end;
end;
//检查目录是否为空
function DirectoryIsEmpty(Directory: string): Boolean;
var
SR: TSearchRec;
i: Integer;
begin
Result := False;
FindFirst(IncludeTrailingPathDelimiter(Directory) + '*',faAnyFile,SR);
for i := 1 to 2 do
if (SR.Name = '.') or (SR.Name = '..') then
Result := FindNext(SR) <> 0;
FindClose(SR);
end;
我的问题在这里:首先运行功能RemoveEmptyDirectory将发现D:\ AAA不为空,然后将运行发送回合(递归方式), 删除2个子目录D:\ AAA \ BB1和D:\ AAA \ BB2之后,父目录将成为一个空目录, 回到第一轮,函数DirectoryIsEmpty报告父目录不是一个空目录!!! 为什么!!!! Windows系统仍然不会更改目录状态吗?
那么,有什么好的建议可以满足我的要求。
解决方法
您从不检查 D:\AAA
本身。
只需进行最后的检查和删除即可
function RemoveEmptyDirectory(path: string) : Boolean;
var
MySearch: TSearchRec;
Ended: Boolean;
begin
if FindFirst(path + '\*.*',faDirectory,MySearch) = 0 then
begin
repeat
if ((MySearch.Attr and faDirectory) = faDirectory) and
(MySearch.Name[1] <> '.') then
begin
if DirectoryIsEmpty(path + '\' + MySearch.Name) then
TDirectory.Delete(path + '\' + MySearch.Name)
else
begin
RemoveEmptyDirectory(path + '\' + MySearch.Name);
if DirectoryIsEmpty(path + '\' + MySearch.Name) then
RemoveEmptyDirectory(path + '\' + MySearch.Name);
end;
end;
until FindNext(MySearch) <> 0;
FindClose(MySearch);
end;
if DirectoryIsEmpty(path) then
TDirectory.Delete(path);
end;
,
您可以将TDirectory
用作
TDirectory.Delete('D:\AAA',True);
如果您需要检查目录是否为空,则可以使用TDirectory.GetDirectories()
作为
Var
S: string;
begin
for S in TDirectory.GetDirectories('D:\AAA','*',TSearchOption.soAllDirectories) do
begin
if TDirectory.IsEmpty(S) then
TDirectory.Delete(S);
end;
If TDirectory.IsEmpty('D:\AAA') then
TDirectory.Delete('D:\AAA');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。