uses
SysUtils, Classes;
function DeleteEmptyDir(const Path: String): Boolean;
var
Index: Integer;
DirNames: TStringList;
SearchRec: TSearchRec;
begin
Result := True;
if Path = '' then
begin
Exit;
end;
DirNames := nil;
try
DirNames := TStringList.Create;
{ Search }
if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*',faAnyFile,SearchRec) = 0 then
begin
try
repeat
if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
begin
Continue;
end;
if (SearchRec.Attr and faDirectory) <> 0 then
begin
DirNames.Add(IncludeTrailingPathDelimiter(Path) + SearchRec.Name);
end
else
begin
Result := False;
end;
until (FindNext(SearchRec) <> 0);
finally
FindClose(SearchRec);
end;
end;
{ Delete sub directories }
for Index := 0 to DirNames.Count - 1 do
begin
if DeleteEmptyDir(DirNames.Strings[Index]) = True then
begin
{ Delete }
if RemoveDir(DirNames.Strings[Index]) = False then
begin
RaiseLastOSError;
end;
end
else
begin
Result := False;
end;
end;
finally
DirNames.Free;
end;
end;
最初に指定したディレクトリは削除されません。戻値がTrueであれば削除可能(指定したディレクトリの下がすべて削除された)であることを示します。
2009年2月27日
ディレクトリツリーから空のディレクトリだけを削除する
指定されたディレクトリの下にあるファイルを持たない空のディレクトリだけを再帰しながら削除していきます。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿