Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#32

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 11:16
Hallo,

statt faDirectory faAnyFile nehmen.

Kurz aus der Delphi 7-Hilfe kopiert:

Code:
FindFirst (Funktion)

Siehe auch   Delphi-Beispiel   C++ Beispiel

Die Funktion sucht in einem Verzeichnis nach dem ersten Vorkommen einer bestimmten Datei mit den angegebenen Attributen.

Unit

SysUtils

Kategorie

Dateiverwaltung

Delphi-Syntax:

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

C++ Syntax:

extern PACKAGE int __fastcall FindFirst(const AnsiString Path, int Attr, TSearchRec &F);

Beschreibung

FindFirst sucht im Verzeichnis Path nach dem ersten Eintrag, der mit dem angegebenen Dateinamen und den festgelegten Attributen übereinstimmt. Das Ergebnis wird im Parameter F zurückgegeben. Den Feldern dieses Datensatzes können Sie die benötigten Informationen entnehmen. FindFirst gibt im Erfolgsfall 0 zurück, ansonsten einen Fehlercode.

Der Konstantenparameter Path enthält das Verzeichnis und die Dateinamensmaske. Es können auch Platzhalterzeichen verwendet werden. '.\test\*.*' gibt beispielsweise alle Dateien im aktuellen Laufwerk an.

Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden:

Konstante   Beschreibung
faReadOnly   Schreibgeschützte Datei
faHidden   Verborgene Datei
faSysFile   Systemdatei
faVolumeID   Laufwerks-ID
faDirectory   Verzeichnis
faArchive   Archivdatei
faAnyFile   Beliebige Datei
Sie können auch mehrere Attribute kombinieren, indem Sie die betreffenden Konstanten hinzufügen (Delphi) bzw. eine ODER-Verknüpfung (C++) durchführen. Soll beispielsweise zusätzlich zu den normalen auch nach schreibgeschützten und versteckten Dateien gesucht werden, übergeben Sie als Parameter Attr in Delphi den Wert (faReadOnly + faHidden) bzw. in C++ den Wert (faReadOnly | faHidden).

Hinweis:   FindFirst weist Ressourcen (Speicher) zu, die durch einen Aufruf von FindClose wieder freigegeben werden müssen.
:   Manche Dateiattributkonstanten sind nicht auf allen Plattformen gültig. So können beispielsweise faVolumeID und faArchive nicht in Linux verwendet werden.
und das Beispiel dazu:
Code:
In diesem Beispiel befinden sich ein Eingabefeld, eine Schaltfläche, ein String-Gitter und sieben Kontrollkästchen in einem Formular. Die Kontrollkästchen entsprechen den sieben möglichen Dateiattributen. Beim Klicken auf die Schaltfläche wird der in das Eingabefeld eingegebene Pfad nach Dateien mit den angegebenen Attributen durchsucht. Name und Größe der übereinstimmenden Dateien werden dann in das String-Gitter eingefügt.

procedure TForm1.Button1Click(Sender: TObject);

var
  sr: TSearchRec;
  FileAttrs: Integer;
begin
  StringGrid1.RowCount := 1;
  if CheckBox1.Checked then
    FileAttrs := faReadOnly
  else
    FileAttrs := 0;
  if CheckBox2.Checked then
    FileAttrs := FileAttrs + faHidden;
  if CheckBox3.Checked then
    FileAttrs := FileAttrs + faSysFile;
  if CheckBox4.Checked then
    FileAttrs := FileAttrs + faVolumeID;
  if CheckBox5.Checked then

    FileAttrs := FileAttrs + faDirectory;
  if CheckBox6.Checked then
    FileAttrs := FileAttrs + faArchive;
  if CheckBox7.Checked then

    FileAttrs := FileAttrs + faAnyFile;

  with StringGrid1 do
  begin
    RowCount := 0;

    if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then
        begin
        RowCount := RowCount + 1;
        Cells[1,RowCount-1] := sr.Name;
        Cells[2,RowCount-1] := IntToStr(sr.Size);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
  Mit Zitat antworten Zitat