Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Schnittstellen für Windowsfunktionen in Delphie 7

  Alt 13. Sep 2006, 13:01
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat