Entwickler-Ecke

Dateizugriff - Dateien eines Ordners auflisten


Nano-Ware - So 20.06.10 20:33
Titel: Dateien eines Ordners auflisten
Hey

ich suche heute schon den ganzen Tag ... ich finde dazu immer nur Codes mit sehr vielen Zeilen :P und für mich leider sehr unverständlich. Also ich habe einen bestimmten Pfad (z.B. c:/) und möchte nach einem bestimmten Format (*.png) suchen. Wie ist das möglich?

lG Nano-Ware


ZeitGeist87 - So 20.06.10 20:34

http://www.delphi-forum.de/viewtopic.php?t=60098

Sogar mit Beispiel :)


Nano-Ware - So 20.06.10 20:43

Vielen Dank schon viel besser^^ nur was ist Rekursiv^^ thx ;D


ZeitGeist87 - So 20.06.10 20:45

Rekursiv bedeutet, dass Unterordner bei der Suche einbezogen werden ;-)


elundril - So 20.06.10 20:49

Die beste Erklärung für Rekursion liefert wohl die englische Seite von Google [http://www.google.com/webhp?q=recursion], wenn man sich den "Meinten Sie"-Link ansieht, wenn man nach "Recursion" sucht. ;)

lg elundril


Nano-Ware - So 20.06.10 20:59

Es tut mir leid aber ich muss euch noch etwas fragen ... ich muss immer alles verstehn^^



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0then begin
    repeat
      if (SR.Name<>'.'and (SR.Name<>'..'and (SR.Attr<>faDirectory) then
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;


Außer AList.Add() versteh ich nichts ;D bitte bitte wenn ihr zeit habt jedes wort erklären^^


ZeitGeist87 - So 20.06.10 21:10

Wir sind da, um zu helfen.
Somit nervt das nicht ;-)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//FindFirst erwartet 3 Parameter:
//          Das Verzeichnis, welches durchsucht werden soll, sowie den Dateinamen.
//          In deinem Falle *.png (* = Wildcard)
//          im zweiten Parameter gibst du an, welche Art von Datei/Ordner er auflisten soll/darf
//      der letzter Parameter ist eine Art Liste, in der die Funde gespeichert werden
if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0then begin
    //Wiederhole solang
    repeat
      //Wenn der Fund (Dateiname) nicht . .. und kein Verzeichnis ist, dann
      if (SR.Name<>'.'and (SR.Name<>'..'and (SR.Attr<>faDirectory) then
          //Füge die Datei der Liste hinzu
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0//bis nichts mehr gefunden wurde
    //"Suchergebnis schließen"
    FindClose(SR);
  end;


Nano-Ware - So 20.06.10 22:01

Vielen Dank nur was stellen diese Worte jetzt da?

faAnyFile-faDirectory

und warum -?


ZeitGeist87 - So 20.06.10 22:03

Aus der Delphi-Hilfe


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Beschreibung

FindFirst sucht im Verzeichnis Path nach dem ersten Eintrag, der mit dem angegebenen Dateinamen und den festgelegten Attributen übereinstimmt. Das Ergebnis wird im Parameter F zurückgegeben. Den Feldern dieses Datensatzes können Sie die benötigten Informationen entnehmen. FindFirst gibt im Erfolgsfall 0 zurück, ansonsten einen Fehlercode.

Der Konstantenparameter Path enthält das Verzeichnis und die Dateinamensmaske. Es können auch Platzhalterzeichen verwendet werden. '.\test\*.*' gibt beispielsweise alle Dateien im aktuellen Laufwerk an.

Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden:

Konstante  Beschreibung
faReadOnly  Schreibgeschützte Datei
faHidden  Verborgene Datei
faSysFile  Systemdatei
faVolumeID  Laufwerks-ID
faDirectory  Verzeichnis
faArchive  Archivdatei
faAnyFile  Beliebige Datei
Sie können auch mehrere Attribute kombinieren, indem Sie die betreffenden Konstanten hinzufügen (Delphi) bzw. eine ODER-Verknüpfung (C++) durchführen. Soll beispielsweise zusätzlich zu den normalen auch nach schreibgeschützten und versteckten Dateien gesucht werden, übergeben Sie als Parameter Attr in Delphi den Wert (faReadOnly + faHidden) bzw. in C++ den Wert (faReadOnly | faHidden).


Nano-Ware - Sa 03.07.10 12:38

Ich habe jetzt doch noch eine Frage ;'D Ich habe in einem Ordner mehrere Dateien ( *irgendeinName*_entitie.png) jetzt möchte ich alle Dateien, die dem entsprechen (also Endung _entitie.png). Geht das auch so einfach?

Ich habe schon einiges versucht, z.B in der geposteten Funktion einfach die Datei bevor sie in die Stringlist eingetragen wird zu filtern aber ich bekomm das nicht hin ._.

Lg Nano-Ware


ZeitGeist87 - Sa 03.07.10 12:40

Du musst einfach nach findfirst(pfad + '*_entitie.png', ...) suchen


Nano-Ware - Sa 03.07.10 12:43

Achso ohh Gott das tut mir leid ich habe das so verstanden, dass das wirklich nur für die Endung ist ;'D DANKE!


ZeitGeist87 - Sa 03.07.10 12:45

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Achso ohh Gott das tut mir leid ich habe das so verstanden, dass das wirklich nur für die Endung ist ;'D DANKE!


Kein Problem :)
Deswegen nachfragen und geholfen werden :lol: