![]() |
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
hi,
wie wäre denn die Funktion umzuschreiben, wenn man anstatt Ordnern die Dateinamen ermitteln will? (Beitrag #29) grüße |
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
Hallo,
statt faDirectory faAnyFile nehmen. Kurz aus der Delphi 7-Hilfe kopiert:
Code:
und das Beispiel dazu:
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.
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; |
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
Habs getestet. Wird nix in die Stringliste geschrieben :(
Delphi-Quellcode:
Habe auch probiert:
//Listet alle Namen von Dateien in einem Verzeichnis
procedure ListDirFiles(sDir: string; const sList: TStrings); var Rec: TSearchRec; begin sList.BeginUpdate; try sList.Clear; if FindFirst(IncludeTrailingPathDelimiter(sDir) + '*.*', faAnyFile or faReadOnly or faHidden or faArchive, Rec) = 0 then begin repeat if (((Rec.Attr and faAnyFile) = faAnyFile) and (Rec.Name <> '.') and (Rec.Name <> '..')) then sList.Add(Rec.Name); until FindNext(Rec) <> 0; SysUtils.FindClose(Rec); end; finally sList.EndUpdate; end; end;
Delphi-Quellcode:
und
...
if FindFirst(IncludeTrailingPathDelimiter(sDir), faAnyFile, Rec) = 0 then ...
Delphi-Quellcode:
Irgendwo ist noch nen kleiner Fehler drinne.
...
if (((Rec.Attr and faAnyFile) = Rec.Attr) and (Rec.Name <> '.') and (Rec.Name <> '..')) then sList.Add(Rec.Name); ... |
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
Versuch es mal mit
Delphi-Quellcode:
if (((Rec.Attr and faDirectory) = 0) then
|
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
Hallo,
schau mal bitte hier: ![]() Ansonsten schau bitte mal in der Suche, es gibt da einige Threads zu dem Thema, eventuell wurde an anderer Stelle die Problematik schon mal unter Lazarus erörtert. Auf die Schnelle fällt mir da jetzt keine Lösung ein. Achso: faAnyFile enthält (soweit ich weiß) bereits faReadOnly, faHidden und faArchive, liegts daran? |
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
Zitat:
|
Re: Verzechniss: alle beinhaltenden Ordner ermitteln?
DeddyH hats mal wieder gelöst :) Vielen Dank
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz