Einzelnen Beitrag anzeigen

Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Leere Verzeichnisse rekursiv löschen

  Alt 7. Mai 2009, 16:09
Oder vollständig:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

procedure DeleteEmptyDirectories(Path : string);
var
  SearchRecord : TSearchRec;
begin

  if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*', faAnyFile, SearchRecord) = 0 then
    begin
      repeat
        if (SearchRecord.Name <> '.') and (SearchRecord.Name <> '..') and (SearchRecord.Attr and faDirectory = faDirectory) then
          DeleteEmptyDirectories(IncludeTrailingPathDelimiter(Path) + SearchRecord.Name);
      until FindNext(SearchRecord) <> 0;
      FindClose(SearchRecord);
    end;

  RemoveDirectory(PChar(IncludeTrailingPathDelimiter(Path)));
end;

begin
  if DirectoryExists(ParamStr(1)) then
    DeleteEmptyDirectories(ParamStr(1));
end.
Prinzipiell könnte man faAnyFile durch eine Maske ersetzen, die spezifischer ist (faDirectory or faHidden or faReadOnly or ...). Da FindFirst intern aber die Windows API MSDN-Library durchsuchenFindFirstFile benutzt und selbige stets alle Dateien zurückliefert und diese Masken nicht unterstüzt, ist die Verwendung von faAnyFile deutlich einfacher ohne dabei großartig Performance einzubußen.
Fridolin Walther
  Mit Zitat antworten Zitat