![]() |
Frage zu FindNext
Moin,
ich habe hier eine Directorystruktur mit 1-3 Unterverzeichnissen: AA aa ab ac BB ba bb bba bbb bbc CC ca das ganze durchsuche ich mit FindFirst / FindNext:
Delphi-Quellcode:
Das ganze klappt auch wunderbar (logisch, hab ich ja auch gut kopiert), aber ...
procedure FindFilesTree(aPath: string);
SearchRec: tSearchRec; begin if aPath [Length (aPath)] <> '\' then aPath := aPath + '\'; if FindFirst (aPath + '*.*', faDirectory, SearchRec) = 0 then begin repeat // Wenn es sich um ein Verzeichnis handelt if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then begin if (SearchRec.Attr and faDirectory > 0) then begin (* Tu irgendwas *) end; // auf Untereinträge prüfen FindFilesTree(aPath + SearchRec.Name); end else // Eintrag ist eine Datei if aWithFiles and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin (* Tu irgendwas anderes *) // solange weiter bis keine weiteren Dateien/Verzeichniss gefunden werden until FindNext(SearchRec) <> 0; (* hier für jedes Unterverzeichnis was machen *) FindClose(SearchRec); end; end; ... die Stelle "(* hier für jedes Unterverzeichnis was machen *)" soll nicht mehr durchlaufen werden wenn es keine weiteren Unterverzeichnisse gibt - also wenn rekursiv alles durchlaufen ist. Bekomme ich das irgendwie aus dem Ergebnis von FindNext mit oder muss ich da eine Hilfsvariable setzen die mir sagt wie tief ich gerade geschachtelt bin ? Hans |
AW: Frage zu FindNext
Warum verwendest du nicht einfach die mitgelieferte Funktionalität von Delphi?
Delphi-Quellcode:
Das hat auch den Vorteil, dass es nicht nur unter Windows funktioniert.
uses
System.IOUtils; var DirList: TArray<string>; begin DirList := TDirectory.GetDirectories('c:\temp', '*', TSearchOption.soAllDirectories); |
AW: Frage zu FindNext
Zitat:
2) bei einem ersten Versuch bekomme ich so alle Direktorys, aber nicht die Dateien darin aufgelistet. Was mache ich denn wenn ich: Verzeichnisse und Unterverzeichnisse habe und zusätzlich auch die Dateien darin brauche ? Gruss Hans |
AW: Frage zu FindNext
Dateien kannst du mit TDirectory.GetFiles finden.
|
AW: Frage zu FindNext
Zitat:
Zitat:
|
AW: Frage zu FindNext
Ich steh da echt auf dem Schlauch und finde auch kein Beispiel ... kann mir mal jemand sagen was ich machen muss damit ich am Schluss folgendes Ergebnis habe:
AA -aa -ab -ac BB -ba --BB ---bba ---bbb ---bbc CC -ca Das groß geschriebene sollen Verzeichnisse sein und die Kleinuchstaben Dateien. Danke Hans |
AW: Frage zu FindNext
![]() ![]() ![]() ![]() Da kann man so viel mit rumspielen:
Delphi-Quellcode:
oder direkt drin verarbeiten
uses System.IOUtils, System.StrUtils, System.DateUtils;
//var Files := TDirectory.GetFiles('C:\ProgramData\Embarcadero'); //var Files := TDirectory.GetFiles('C:\ProgramData\Embarcadero', '*.slip'); //var Files := TDirectory.GetFiles('C:\ProgramData\Embarcadero', '*.slip', soAllDirectories); var Files := TDirectory.GetFiles('C:\ProgramData\Embarcadero', '*.*', soAllDirectories, function(const Path: string; const SearchRec: TSearchRec): Boolean begin //var FullName := Path + SearchRec.Name; //Result := SearchRec.TimeStamp > StartOfTheDay(Now) - 14; // maximal zwei Wochen alt Result := EndsText(SearchRec.Name, '.slip'); end); for var FileName in Files do Memo1.Lines.Add(FileName);
Delphi-Quellcode:
oder
TDirectory.GetFiles('C:\ProgramData\Embarcadero', '*.slip',
function(const Path: string; const SearchRec: TSearchRec): Boolean // muß keine anonyme Methode sein ... Funktionen und KlassenMethoden gehn auch begin Memo1.Lines.Add(TPath.Combine(Path, SearchRec.Name)); Result := True; // Result := not AbortButton.Down; end); oder oder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz