Entwickler-Ecke
Dateizugriff - FindFirst Keine Unterordner
Borlox - Mi 06.11.02 17:14
Titel: FindFirst Keine Unterordner
Was mache ich falsch? Er durchsucht keine Unterordner!!
Was ist an meinem Code falsch????
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| Procedure FindFiles (aPath, aFindMask: String); Var FindRec: tSearchRec; Begin If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then showmessage(FindRec.Name); Until FindNext (FindRec) <> 0; if FindNext (FindRec)=0 then showmessage('Nichts'); FindClose (FindRec);
If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then If Boolean (FindRec.Attr and faDirectory) Then FindFiles (aPath + FindRec.Name, aFindMask); Until FindNext (FindRec) <> 0; FindClose (FindRec);
End;
procedure TForm1.FormCreate(Sender: TObject); begin FindFiles(PChar('C:\WINDOWS\Desktop\'), '*.jpg'); end; |
AndyB - Mi 06.11.02 18:23
Zitat: |
FindFirst(aPath + aFindMask, ...) |
Ich würde sagen, dass du keine Unterordner in dem Verzeichnis hast, die der Maske "*.jpg" entsprechen.
Borlox - Mi 06.11.02 19:07
Titel: ???
Meinst du damit, dass ich keine Unterordner habe, in denen auch JPG-Dateinen sind?
Das ist leider nicht so, habe ich als erstes überprüft!!!
Leider findet er nur die Dateien, die direkt in dem Ordner sind!!
AndyB - Mi 06.11.02 19:36
Titel: Re: ???
Borlox hat folgendes geschrieben: |
Meinst du damit, dass ich keine Unterordner habe, in denen auch JPG-Dateinen sind? |
Nein, das meinte ich nicht. Aber ich hatte mich verlesen.
Der Fehler dürfte in dieser Zeile sein:
Quelltext
1:
| FindFiles (aPath + FindRec.Name, aFindMask); |
Dort hast du den abschließenden Backslash vergessen. Aus
C:\Windows\Desktop\Unterordner wird im FindFirst-Aufruf
C:\Windows\Desktop\Unterordner*.*
So müsste es funktionieren:
Quelltext
1:
| FindFiles (aPath + FindRec.Name + '\', aFindMask); |
Anonymous - Mi 06.11.02 20:36
Aus diesem Grung benutze ich auch kein Path und FindMask, sondern gebe das als ein String an (z.B. 'c:\temp\*.jpg').
Hier die veränderte Prozedur von mir. Da ich mich selbst um die Trennung kümmere, kann nicht passieren, daß am Pfad ein "\" fehlt.
Weiterhin würde ich faAnyFile nicht für die Suche benutzen, da du da viel unnütigen Müll mitbekommst.
Hier eine Prozedur die ich benutze. Sie ist außerden unabhängig von der ListBox. Das Ergebnis der Suche steht in einem String und kann später als Text an ein StringList Objekt übergeben werden.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure GetAllFilesF(PathAndMask: String; var Text: String); var Search: TSearchRec; Verz: String; Attrib: Integer; begin Verz := ExtractFilePath(PathAndMask); Attrib := faArchive + faReadOnly + faHidden;
if FindFirst(PathAndMask, Attrib, Search) = 0 then { suche Dateien } repeat Text := Text + Verz + Search.Name + ^j until FindNext(Search) <> 0;
if FindFirst(Verz + '*.*', faDirectory, Search) = 0 then begin { durchsuche Unterordner } repeat if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then GetAllFilesF(Verz + Search.Name + '\' + ExtractFileName(PathAndMask), Text); until FindNext(Search) <> 0; FindClose(Search); end; end;
procedure TForm1.Button1Click(Sender: TObject); // Beispielaufruf var Test: String; begin GetAllFilesF('c:\temp\*.jpg', Test); ListBox1.Items.Text := Test; ShowMessage(IntToStr(ListBox1.Items.Count) + ' Daten gefunden'); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!