Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner prüfen ob er leer ist (https://www.delphipraxis.net/110375-ordner-pruefen-ob-er-leer-ist.html)

DeddyH 17. Mär 2008 11:02

Re: Ordner prüfen ob er leer ist
 
@Manuel: Fehlt da nicht ein FindNext?

taaktaak 17. Mär 2008 11:03

Re: Ordner prüfen ob er leer ist
 
@Muhkuh: Aber auch deine Funktion erkennt Directories als Files - oder??

SaFu 17. Mär 2008 11:04

Re: Ordner prüfen ob er leer ist
 
jetzt bin total verwirrt bei mir funktioniert so gut wie keine lösung richtig

DeddyH 17. Mär 2008 11:05

Re: Ordner prüfen ob er leer ist
 
Zitat:

Zitat von taaktaak
@Muhkuh: Aber auch deine Funktion erkennt Directories als Files - oder??

Was wäre denn da so schlimm daran? Ein Verzeichnis, das Unterverzeichnisse enthält, ist eben auch nicht leer.

taaktaak 17. Mär 2008 11:08

Re: Ordner prüfen ob er leer ist
 
Wieso schlimm, kommt natürlich auf die Aufgabenstellung an :mrgreen:

bluesbear 17. Mär 2008 11:10

Re: Ordner prüfen ob er leer ist
 
Jetzt kam ich ins grübeln, wie ich das eigentlich mache. Ganz tief unten in der Code-Kiste fand ich die Kanone, mit der ich auf den Spatz schieße:
Delphi-Quellcode:
procedure GetListOfFiles(FileList: TStrings; Source, FileMask: string;
    Attributes, IgnoreAttributes: Integer; Recurse: Boolean);
var SearchDir: string;
    SearchRec: TSearchRec;
    Res : Integer;
    DirList : TStringList;
    i : Integer;
begin
  DirList := TStringList.Create;
  try
    SearchDir := AddBackSlashL(Source);
    Res := SysUtils.FindFirst(SearchDir + FileMask, Attributes, SearchRec);
    while (Res = 0) and (SearchRec.Name > '') do begin
      if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and
         ((Attributes = faAnyFile) or ((SearchRec.Attr and Attributes) <> 0)) and
         ((IgnoreAttributes = 0) or ((SearchRec.Attr and IgnoreAttributes) = 0)) then begin
        FileList.Add(SearchDir + SearchRec.Name);
      end;
      Res := FindNext(SearchRec);
    end;
    if Recurse and ((Attributes and faDirectory) = 0) then begin  // Unterordner durchsuchen
      GetListOfFiles(DirList, Source, '*.*', faDirectory, 0, True);
      for i:=0 to Pred(DirList.Count) do begin
        GetListOfFiles(FileList, DirList[i], FileMask, Attributes, 0, True);
      end;
    end;
  finally
    SysUtils.FindClose(SearchRec);
    DirList.Free;
  end;
end;

function IsDirEmpty(const Dir: string): Boolean;
var SL : TStringList;
begin
  SL := TStringList.Create;
  try
    GetListOfFiles(SL, Dir, '*.*', faAnyFile - faDirectory, 0, False);
    Result := SL.Count = 0;
  finally
    SL.Free;
  end;
end;
Nu, der Spatz ist garantiert tot! :mrgreen:

DeddyH 17. Mär 2008 11:17

Re: Ordner prüfen ob er leer ist
 
Noch' n Gedicht :mrgreen:
Delphi-Quellcode:
function IsFolderEmpty(const Foldername: string): Boolean;
var Rec: TSearchRec;
begin
  Result := false;
  if FindFirst(IncludeTrailingPathDelimiter(Foldername) + '*.*',faAnyFile,Rec) = 0 then
    begin
      repeat
        Result := (Rec.Name = '.') or (Rec.Name = '..');
      until (FindNext(Rec) <> 0) or not Result;
      FindClose(Rec);
    end;
end;

Die Muhkuh 17. Mär 2008 11:22

Re: Ordner prüfen ob er leer ist
 
Zitat:

Zitat von DeddyH
@Manuel: Fehlt da nicht ein FindNext?

:oops: Asche auf mein Haupt.

SaFu 22. Mär 2008 20:35

Re: Ordner prüfen ob er leer ist
 
Ok Danke funktioniert so

gruss sascha

Christian Seehase 8. Mai 2008 23:21

Re: Ordner prüfen ob er leer ist
 
Zitat:

Zitat von DeddyH
Noch' n Gedicht :mrgreen:
Delphi-Quellcode:
function IsFolderEmpty(const Foldername: string): Boolean;
var Rec: TSearchRec;
begin
  Result := false;
  if FindFirst(IncludeTrailingPathDelimiter(Foldername) + '*.*',faAnyFile,Rec) = 0 then
    begin
      repeat
        Result := (Rec.Name = '.') or (Rec.Name = '..');
      until (FindNext(Rec) <> 0) or not Result;
      FindClose(Rec);
    end;
end;

Ich hätte dazu noch eine Idee ;-)

Delphi-Quellcode:
function IsDirectoryEmtpy(const AsFolder : string) : Boolean;

var
  sr : TSearchRec;

begin
  Result := FindFirst(IncludeTrailingPathDelimiter(AsFolder)+'*.*',faAnyFile,sr) = 0;
  if Result then begin
    try
      Result := (FindNext(sr) = 0) and (FindNext(sr) <> 0);
    finally
      FindClose(sr);
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz