Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi alle dateien eines ordners ausgeben (https://www.delphipraxis.net/25056-alle-dateien-eines-ordners-ausgeben.html)

blackvisions 30. Jun 2004 15:24


alle dateien eines ordners ausgeben
 
hey leute

ich bin nich so der programmierfreak, und komm deshalb auch nich so guet draus wie ihr alle wahrscheinlich. Nun habe ich eine frage:

ich möchte einen ordner angeben (ExtractFileDir()) und aus diesem ordner alle files auslesen und zum beispiel in einer listbox ausgeben.

wie mache ich das?? ich habe kein ahnung.. bin mal die themen in diesem forum durchgegange und habe ein paar sachen mit api und findfirst / findnext und so gefunden, komme aber überhaupt nicht draus.. :(

please help :pale:

S2B 30. Jun 2004 15:46

Re: alle dateien eines ordners ausgeben
 
Sich mal in der Codelib! findfirstfindfirst

Steve 30. Jun 2004 15:46

Re: alle dateien eines ordners ausgeben
 
Hi und herzlich willkommen in der DP! :dp:

Mit FindFirst usw. liegst Du hier vollkommen richtig:
Delphi-Quellcode:
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
Rückgabewert ist bei Erfolg 0, sonst Fehlercode
In Path gibst Du den Suchparameter an, in Deinem Fall [pfad]\*.*

In "Attr" gibst Du an, welche Dateien Du suchst (Attribute der Dateien vielmehr)
Code:
Konstante     Beschreibung
faReadOnly          Schreibgeschützte Datei
faHidden            Verborgene Datei
faSysFile               Systemdatei
faVolumeID          Laufwerks-ID
faDirectory         Verzeichnis
faArchive           Archivdatei
faAnyFile           Beliebige Datei
In Deinem Fall also faAnyFile

Um den Dateinamen zu erhalten, musst Du F.Name auswerten.
Nun hast Du die erste Datei erhalten. um die weiteren Dateien im Verzeichnis zu finden, ruf FindNext(F) auf und gehe mit F.Name analog vor

Nach der letzten Datei (Rückgabewert von findNext<>0) musst Du reservierten Speicher wieder freigeben, und zwar mit FindClose :)

Siehe auch OH :zwinker:

Schönen Gruß
Stephan

Niko 30. Jun 2004 15:50

Re: alle dateien eines ordners ausgeben
 
Hallo, herzlich willkommen in der Delphi-PRAXiS! :dp:

Das sollte etwa so gehen:
Delphi-Quellcode:
procedure FindAll(Path: String; List: TStringList);
var
  SearchRec: TSearchRec;
begin
  List.Clear;
  if FindFirst(Path + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      List.Add(SearchRec.Name);
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
[EDIT] Bin ich langsam :?
FindClose ergänzt[/EDIT]

blackvisions 30. Jun 2004 16:30

Re: alle dateien eines ordners ausgeben
 
riiiisen dank an alle! habt mir weiter geholfen aber was ich völlig ausser acht gelassen habe:

simple und eifache !!FileListBox!! :wall: :wall: :wall: ist am einfachsten ;)

aber nochmals vielen danke an alle! *g*

Freddy82 16. Jul 2004 21:11

Re: alle dateien eines ordners ausgeben
 
Ich hab ein ähnliches Problem:

Ich habe einen Ordner mit vielen (ca. 1000) Dateien. In diesen Ordner werden von einem anderen Programm Logfiles geschrieben, mein Delphiprogramm überwacht in regelmäßigen Abständen den Ordner und überprüft, ob neue Dateien dazugekommen sind und wertet diese aus.

Soweit zur Theorie, das Problem an der Sache: Wenn ich mit FindNext durch die Dateien gehe dauert das sehr lange, da es halt viele Dateien sind. Letztendlich interessieren mich aber nur die neusten Dateien, die seit dem letzten Durchlauf dazugekommen sind. Gibt es eine Möglichkeit bei FindNext die Dateien nach dem Erstellungsdatum sortiert (neueste zuerst) zu durchlaufen?

Wenn dem so wäre könnte ich den Durchlauf einfach abbrechen, nachdem ich die erste Datei finde, die nicht neu ist, mit dem herkömmlichen FindNext muss ich jedoch immer alle Dateien durchgehen.

Vielen Dank und Grüße, Freddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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