Autor Beitrag
Borlox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: Mi 06.11.02 17:14 
Was mache ich falsch? Er durchsucht keine Unterordner!!
Was ist an meinem Code falsch????

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?
Borlox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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:
ausblenden 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:
ausblenden Quelltext
1:
FindFiles (aPath + FindRec.Name + '\', aFindMask);					

_________________
Ist Zeit wirklich Geld?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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.


ausblenden 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;