Ordner prüfen ob er leer ist
Hi
gibt es eine Möglichkeit zu prüfen ob ein Ordner lee ist oder nicht z.b.
Delphi-Quellcode:
Gruß Saschaif Directory(C:\test) = Empty then showmessage ('leer'); |
Re: Ordner prüfen ob er leer ist
mit FindFirst und FindNext schauen ob etwas im ordner gefunden wird :)
|
Re: Ordner prüfen ob er leer ist
da bräuchte man doch nur per FindFirst() zu gucken ob du was findest...
//Da war Sir Thornberry ein bisschen schneller :D |
Re: Ordner prüfen ob er leer ist
Aber Vorsicht - FindFirst alleine geht schief weil in jedem Ordner "." und ".." gefunden wird.
|
Re: Ordner prüfen ob er leer ist
Nicht gewusst :thumb:
|
Re: Ordner prüfen ob er leer ist
so ähnlich
Delphi-Quellcode:
if FindFirst(Form1.ServerPfad + 'Bilder',faAnyFile, SR) = 0 then
|
Re: Ordner prüfen ob er leer ist
Zitat:
Delphi-Quellcode:
Denn bei Deiner Abfrage werden auch die . und .. Verzeichnisse mit ausgewertet.
if FindFirst(Form1.ServerPfad + 'Bilder\*.jpg',faAnyFile, SR) = 0 then
Wie der Sir schon gesagt hat. Grüße Klaus |
Re: Ordner prüfen ob er leer ist
Hmm, schon richtig,
aber bei Angabe eines Extends wird nicht allgemeingültig geprüft, ob das Verzeichnis leer ist. In diesem Fall wird lediglich geprüft, ob sich Dateien mit der spezifizierten Endung im Verzeichnis befinden. |
Re: Ordner prüfen ob er leer ist
Zitat:
das ist schon richtig was Du schreibst. Ich ging nur davon aus, dass sich im Ordner Bilder auch nur jpg-Bilder befinden. Grüße Klaus |
Re: Ordner prüfen ob er leer ist
Ja mein problem ist ja noch das ich auf drei Formate prüfen muss (jpg,gif und bmp) also fühge ich es einfach mit einem OR an oder?
einfacher wäre es natürlich ob es kommplett leer ist. |
Re: Ordner prüfen ob er leer ist
Mit OR die Strings verketten? Nee, wie sollte das funktionieren?
|
Re: Ordner prüfen ob er leer ist
|
Re: Ordner prüfen ob er leer ist
Das ist dort ja nahezu genial gelöst!
|
Re: Ordner prüfen ob er leer ist
Also ich kann machen was ich will ich bekomm immer nur ein false rause
Delphi-Quellcode:
mach ich was falschdirectory:= (Form1.ServerPfad + 'DokumentenurRTF'); isEmpty := IsDirectoryEmpty(directory) ; ShowMessage(BoolToStr(isEmpty,true)) ; function TForm5.IsDirectoryEmpty(const directory: string): boolean; var searchRec :TSearchRec; begin try result := (FindFirst(directory+'\*.*', faAnyFile, searchRec) = 0) AND (FindNext(searchRec) = 0) AND (FindNext(searchRec) <> 0) ; finally FindClose(searchRec) ; end; end; |
Re: Ordner prüfen ob er leer ist
autsch. Die Lösung gefällt mir überhaupt nicht. Aber das ist geschmacksache. Am besten weißt du die Ergebnisse erstmal auf temporäre Variablen zu dann kannst du debuggen warum du nicht das gewünschte Ergebnis bekommst.
|
Re: Ordner prüfen ob er leer ist
Das ergebnis ist doch auf eine Variable zugewiesen
Delphi-Quellcode:
oder verstehe ich das falsch
isEmpty : boolean;
|
Re: Ordner prüfen ob er leer ist
Moin, Moin SirThornberry!
Was gefällt dir an der Lösung nicht (abgesehen davon, dass sie keine korrekten Ergebnisse liefert) - Subdirectories werden in der Originalform leider auch als Files erkannt! Aber sonst ist sie doch optinal kurz: FindFirst findet ".", das erste FindNext findet "..", das zweite FindNext enstscheidet dann (leider falsch) |
Re: Ordner prüfen ob er leer ist
mir gefällt an der Lösung zum Beispiel nicht das FindClose auch aufgerufen wird wenn FindFirst fehlschlägt. Das ist zwar erlaubt aber überflüssig. Der Sinn von Try-Finally bleibt mir an der Stelle auch Schleierhaft. Es ist nirgends Code der eine Exception erzeugen könnte.
|
Re: Ordner prüfen ob er leer ist
Hi,
ich werfe mal diese Funktion in den Raum:
Delphi-Quellcode:
function IsDirectoryEmpty(Directory: String): Boolean;
var SR: TSearchRec; begin Result := false; if FindFirst(Directory, faAnyFile, SR) = 0 then begin repeat Result := (SR.Name <> '.') and (SR.Name <> '..'); until Result; FindClose(SR); end; end; |
Re: Ordner prüfen ob er leer ist
Ja, das sind nachvollziehbare Argumente :hi:
|
Re: Ordner prüfen ob er leer ist
@Manuel: Fehlt da nicht ein FindNext?
|
Re: Ordner prüfen ob er leer ist
@Muhkuh: Aber auch deine Funktion erkennt Directories als Files - oder??
|
Re: Ordner prüfen ob er leer ist
jetzt bin total verwirrt bei mir funktioniert so gut wie keine lösung richtig
|
Re: Ordner prüfen ob er leer ist
Zitat:
|
Re: Ordner prüfen ob er leer ist
Wieso schlimm, kommt natürlich auf die Aufgabenstellung an :mrgreen:
|
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:
Nu, der Spatz ist garantiert tot! :mrgreen:
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; |
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; |
Re: Ordner prüfen ob er leer ist
Zitat:
|
Re: Ordner prüfen ob er leer ist
Ok Danke funktioniert so
gruss sascha |
Re: Ordner prüfen ob er leer ist
Zitat:
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; |
Re: Ordner prüfen ob er leer ist
Zitat:
|
Re: Ordner prüfen ob er leer ist
Moin,
nicht Delphi, aber Windows bringt die gesuchte Funktion bereits mit:
Delphi-Quellcode:
Da auch nicht existierende Verzeichnisse als "nicht leer" ausgewiesen werden, wird man wohl in der Regel zusätzlich SysUtils.DirectoryExists() einsetzen.
const
shlwapi = 'shlwapi.dll'; function PathIsDirectoryEmpty(pszPath: PAnsiChar): BOOL; stdcall; external shlwapi name 'PathIsDirectoryEmptyA'; procedure TDemoForm.ButtonClick(Sender: TObject); var isEmpty: Boolean; begin isEmpty := PathIsDirectoryEmpty(PChar(Edit.Text)); ShowMessage(BoolToStr(isEmpty, True)); end; Grüße vom marabu |
Re: Ordner prüfen ob er leer ist
Also die Lösung vom Klaus01 funktioniert bis jetzt ohne Probleme, gut ich muss dazu sagen das ich dieses noch nicht groß getestet habe aber im groben funzt es.
Ich bin natürlich für verbesserungen offen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr. |
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