Problem mit FindFirst und FindNext
-
Hallo,
ich habe noch immer Probleme damit, alle Dateien und Unterordner eines vordefinierten Ordners anzeigen zu lassen.
Hier ist erstmal der Quelltext:void __fastcall TForm1::SearchFiles(AnsiString Root) { // Funktionsvariablen / Objekte TStringList *Dirs=new TStringList(); TSearchRec f; TSearchRec f1; int FFRes; AnsiString Verz; // Richtige Formatierung des Suchverzeichnisses if (Root[Root.Length()]=='\\') Verz=Root+"*.*"; else Verz=Root+"\\*.*"; FFRes=FindFirst(Verz,0x10,f); // Verzeichnisse suchen // Sollte Suche nach Ordner erfolgerich sein if (FFRes==0) { // Suche solange weiter bis Suchen nach einem Ordner nicht mehr erfolgreich ist while (FFRes==0) { if ((f.Attr&0x10)==0x10) { ;//Dir if (f.Name[1]!='.') Dirs->Add(f.Name); } FFRes=FindNext(f); } FindClose(f); } if (Root[Root.Length()]=='\\') Verz= Root; else Verz=Root + "\\"; FFRes=FindFirst(Verz,faAnyFile ,f); // Dateien suchen // Sollte Suche nach Datei erfolgreich sein if (FFRes==0) { while (FFRes==0) { if ((f.Attr&32)) { ;//File if (Root[Root.Length()]=='\\') LBoxFilesToZip->Items->Add(Root+f1.Name); else LBoxFilesToZip->Items->Add(Root+"\\"+f.Name); } FFRes=FindNext(f); } FindClose(f); } for (int i=0;i<Dirs->Count;i++) { Update(); if (Root[Root.Length()]=='\\') SearchFiles(Root+Dirs->Strings[i]); else SearchFiles(Root+"\\"+Dirs->Strings[i]); } delete Dirs; }
Das Hauptproblem ist, dass erstmal garnichts in der ListBox angzeigt wird.
Beim Durchsuchen nach einer Datei (faAnyFile mit Attr = 32) im unter Quelltextbereich, wird bei FindFirst eine 2 zurückgegeben da gleiche gillt für FindNext, wenn ich bei der ersten Abfrage mitteile, dass die 2 als Rückgabeparameter ok ist. Leider habe ich keine Ahnung, was die 2 oder sogar die 6 (es Variert beim zweiten Durchlauf) für eine Fehelerbedeutung hat.
Kann mir da einer weiterhelfen?
Ich möchte alle Dateien und die dazugehörigen Pfadangaben der Dateien anzeigen lassen. Als übergabewert (AnsiString) erhält die Funktion GetCurrentDir().
Die Suche der Ordner scheint durchaus zu funktionieren.Bitte helft mir.
-
ErrorCode 2 bedeutet "File not found".
-
der Fehler dürfte in Zeile 33 bis 36 liegen, denn auch dort mußt du nach . suchen...
ein weitere kleiner Fehler befindet sich hier:
LBoxFilesToZip->Items->Add(Root+[b]f1[/b].Name);
noch einen Tipp: schau dir mal die Funktion IncludeTrailingPathDelimiter bzw. IncludeTrailingBackslash an, dann brauchst du nicht ständig die Abfrage nach dem abschließenden Backslash
-
Wie Linnea sagt: es fehlt das Dateisuchmuster.
In meinem Beispiel steht
if (Root[Root.Length()]=='\\') Verz=Root + Edit1->Text; else Verz=Root + "\\" + Edit1->Text;
Edit1 ist ein Textfeld mit dem gewünschten Suchmuster!
(*.* oder *.bmp oder...
das MUSS natürlich angehängt werden, das Feld hatte ich ganz vergessen zu erwähnen.Gruss
Frnk