Zitat von
mkinzler:
Such mal nach FindFirst
Naja ich denke man sollte ihm das schon bisschen erklären..
Also zuerst mal ein ganz kleines Beispiel mit Erklärung:
Delphi-Quellcode:
var SearchRec: TSearchRec;
begin
if FindFirst('C:\*.*',faAnyFile,SearchRec) = 0 then // Datei gefunden
begin
ShowMessage(SearchRec.Name); // DateiName anzeigen
end;
FindClose(SearchRec);
end;
Also zuerst musst du eine Variable deklarieren vom Typ TSearchRec. Darin werden die Informationen über eine gefundene Datei abgelegt (deswegen auch var-Parameter). Wie schon oben im Quelltext zu sehen gibt FindFirst 0 zurück wenn die/eine Datei gefunden wird die den Kriterien entspricht, die bei Pfad angegeben wurden (z.B findet C:\*.* die erst beste Datei auf C:\; C:\*.txt die erste Textdatei usw... wobei nicht rekursiv durchsucht wird.. das muss man schon selbst machen.. aber dazu komme ich gleich).
Jetzt zu den einzelnen Eigenschaften von TSearchRec:
Name = DateiName der gefundenen Datei (ohne Pfad!)
Size = Dateigröße der gefundenen Datei in Bytes
Attr = Attribute der gefundenen Datei (faReadOnly, faHidden, faSysFile, faVolumeID, faDirectory, faArchive, faSymLink, faAnyFile)
Time = Erstellungsdatum der Datei (Muss mit FileDateToDateTime(TSearchRec.Time) in ein normales TDate umgewandelt werden!)
ExcludeAttr = hab ich leider keine Ahnung
FindHandle = Unwichtig.. wird nur intern von TSearchRec,FindFirst,FindNext,.. benutzt
FindData = Record mit allen oben schon beschriebenen Daten und auch das ein oder andere zusätzliche...
Zu TSearchRec.Attr: Du überprüfst ob ein Attribut gesetzt ist folgendermaßen:
Delphi-Quellcode:
if SearchRec.Attr and faHidden <> 0 then
ShowMessage('Datei ist versteckt!');
Ein Beispiel um eine bestimmte Datei zu suchen:
Delphi-Quellcode:
procedure TForm1.FindSpezificFile(Filename: String; Path: String);
var SR: TSearchRec;
tmpPath: String;
begin
tmpPath := Path + '*.*';
if FindFirst(tmpPath,faAnyFile, SR) = 0 then // was gefunden?
begin
repeat // solange...
if ((SR.Attr and faDirectory) = faDirectory) then // falls es ein Ordner ist dann auch diesen durchsuchen
begin
if (SR.Name <> '.') and (SR.Name <> '..') then
begin
FindSpezificFile(Filename, Path + SR.Name +'\');
end;
end else // wenn nicht dann gucken ob die gefundene Datei (teilweise) mit der gesuchten übereinstimmt
begin
if pos(Uppercase(Filename),UpperCase(SR.Name)) > 0 then
ListBox1.Items.Add(Path + SR.Name); // Gefundene Datei in Listbox anzeigen
end;
Application.ProcessMessages; // PC soll in der Zeit noch reagieren
until FindNext(SR) <> 0; // nach neuen Dateien in dem Ordner suchen bis keine mehr da gefunden werden
FindClose(SR); // Suche beenden
end;
end;
//Aufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
FindSpezificFile(Edit1.Text,'C:\');
end;
Ich hoffe mal das ich einigermaßen verständlich erklärt habe
Gruß
Neutral General