Entwickler-Ecke

Dateizugriff - Dateien finden


areuter - So 20.03.05 14:22
Titel: Dateien finden
hallo.
irgendwie komme ich hier mit diesen ganzen threads und der delphi-hilfe nicht zurecht.
kann mir bitte jemand helfen.
wie kann ich ein verzeichnis auslesen und die dateien finden? ist das wirklich so schwer? ich möchte eigentlich nur den namen einer datei (*.db) aus einem verzeichnis (c:\test) herausfinden und diesen als z.b. label1.caption anzeigen lassen. muss ich irgendetwas in der uses deklarieren?
vielen dank im voraus für die hilfe!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var Srec: TSearchRec;
    found: integer;
begin
found:= findfirst(???); // was muss hier rein und was bedeutet dies?
while found=0 do
begin
label1.caption:= // ???   
found:=findnext(Srec); // was hat Srec zu bedeuten (wert?)
  end;
findclose(Srec);


Diabele$ - So 20.03.05 14:26

Hatte ich auch gerade nachgeschaut:

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

Bloß funzt das mit den Unterverzeichnissen nicht so richtig:
Ich gebe bei aWithSub true ein, aber er listet mir trotzdem nur die Dateien aus dem Standardpfad (also aPath) auf, obwohl ich weiß, dass in den Unterverzeichnissen auch Dateien liegen, die dem Filter entsprechen. :(

Oder liegt das an mir :?: :?: :?:


mirage228 - So 20.03.05 14:32

Hi,

versuchs mal mit dem Code, der funktioniert auf jeden Fall:


Delphi-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:
27:
28:
29:
procedure FileList(const APath, AExt: string; ARecurse: Boolean; 
  AList: TStrings); 
var 
  F    : TSearchRec; 
  Path : string
begin 
  Path := IncludeTrailingPathDelimiter(APath); // nur für Delphi 4 und höher! 
  if (ARecurse) and 
    (FindFirst(Path + '*.*', faAnyFile, F) = 0then 
  try 
    repeat 
      if (F.Name <> '.'and (F.Name <> '..'and 
        ((F.Attr and faDirectory) = faDirectory) then 
        FileList(Path + F.Name, AExt, ARecurse, AList); 
    until FindNext(F) <> 0
  finally 
    FindClose(F); 
  end
  if FindFirst(Path + AExt, faAnyFile, F) = 0 then 
  try 
    repeat 
      if (F.Name <> '.'and (F.Name <> '..'and 
        ((F.Attr and faDirectory) <> faDirectory) then 
        AList.Add(Path + F.Name); 
    until FindNext(F) <> 0
  finally 
    FindClose(F); 
  end
end;


Bei dem Code aus Deinem Link scheint es, als ob nur in Unterverzeichnissen weitergesucht, falls im ersten Verzeichnis etwas gefunden wurde. Habe mir den Code aber nicht näher angeschaut...

mfG
mirage228


areuter - So 20.03.05 14:34

vielen dank für die super schnelle antwort!
werde es gleich mal ausprobieren.
gruss und noch einen schönen sonntag
arne


Diabele$ - So 20.03.05 14:44

Ja, bei dem Code funktioniert's perfekt :wink:


areuter - So 20.03.05 15:05

für alle, die eine kleine einfach routine haben möchten:
sucht nach einer .exe und zeigt diese als label an.
grüsse arne

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
Var
  FindRec: tSearchRec;
Begin
  If FindFirst ('c:\verzeichnis\' + '*.exe', faAnyFile, FindRec) = 0 Then
    Repeat
      If (FindRec.Name <> '.'and (FindRec.Name <> '..'Then
      label1.caption:=FindRec.Name;
    Until FindNext (FindRec) <> 0;

  FindClose (FindRec);

end;
end.


mimi - So 20.03.05 16:15

ich habe herrausgefunden das es besser ist:
FindFirst ('c:\verzeichnis\' + '*.exe'+#0 zu machen, warum weiß ich nicht, aber so funktioniert es aufjedenfall...