AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu FindNext

Ein Thema von H.Bothur · begonnen am 12. Dez 2023 · letzter Beitrag vom 12. Dez 2023
Antwort Antwort
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Frage zu FindNext

  Alt 12. Dez 2023, 11:30
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:
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;
Das ganze klappt auch wunderbar (logisch, hab ich ja auch gut kopiert), aber ...

... 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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frage zu FindNext

  Alt 12. Dez 2023, 12:04
Warum verwendest du nicht einfach die mitgelieferte Funktionalität von Delphi?
Delphi-Quellcode:
uses
  System.IOUtils;

var
  DirList: TArray<string>;
begin
  DirList := TDirectory.GetDirectories('c:\temp', '*', TSearchOption.soAllDirectories);
Das hat auch den Vorteil, dass es nicht nur unter Windows funktioniert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Frage zu FindNext

  Alt 12. Dez 2023, 13:34
Warum verwendest du nicht einfach die mitgelieferte Funktionalität von Delphi?
  DirList := TDirectory.GetDirectories('c:\temp', '*', TSearchOption.soAllDirectories); Das hat auch den Vorteil, dass es nicht nur unter Windows funktioniert.
1) Ehrlich gesagt kannte ich das noch nicht
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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frage zu FindNext

  Alt 12. Dez 2023, 13:47
Dateien kannst du mit TDirectory.GetFiles finden.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
21 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frage zu FindNext

  Alt 12. Dez 2023, 13:49
Zitat:
Was mache ich denn wenn ich:

Verzeichnisse und Unterverzeichnisse habe
und zusätzlich auch die Dateien darin brauche ?
Dateien kannst du mit TDirectory.GetFiles finden.
Anschließend würde ich über DirList drüber iterieren und TDirectory.GetFiles(Pfad) aufrufen. Dann hast du die einzelnen Dateien.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Frage zu FindNext

  Alt 12. Dez 2023, 13:56
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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#7

AW: Frage zu FindNext

  Alt 12. Dez 2023, 14:49
Delphi-Referenz durchsuchenTDirectory.GetFileSystemEntries
Delphi-Referenz durchsuchenTDirectory.GetDirectories
Delphi-Referenz durchsuchenTDirectory.GetFiles
https://docwiki.embarcadero.com/Code...ation_(Delphi)

Da kann man so viel mit rumspielen:
Delphi-Quellcode:
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);
oder direkt drin verarbeiten
Delphi-Quellcode:
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
oder
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Dez 2023 um 14:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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