AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Verzechniss: alle beinhaltenden Ordner ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Verzechniss: alle beinhaltenden Ordner ermitteln?

Ein Thema von LuCSteR · begonnen am 3. Sep 2008 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
Seite 4 von 4   « Erste     234   
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#31

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 09:53
hi,

wie wäre denn die Funktion umzuschreiben, wenn man anstatt Ordnern die Dateinamen ermitteln will? (Beitrag #29)


grüße
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#32

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 10: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
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#33

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 10:47
Habs getestet. Wird nix in die Stringliste geschrieben

Delphi-Quellcode:
//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;
Habe auch probiert:
Delphi-Quellcode:
...
if FindFirst(IncludeTrailingPathDelimiter(sDir), faAnyFile, Rec) = 0 then
...
und
Delphi-Quellcode:
...
if (((Rec.Attr and faAnyFile) = Rec.Attr) and (Rec.Name <> '.') and (Rec.Name <> '..')) then sList.Add(Rec.Name);
...
Irgendwo ist noch nen kleiner Fehler drinne.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#34

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 11:03
Versuch es mal mitif (((Rec.Attr and faDirectory) = 0) then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#35

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 11:14
Hallo,

schau mal bitte hier: http://www.delphipraxis.net/internal...ight=faanyfile, da hatte vor wenigen Tagen schonmal jemand ein derartiges Problem, eventuell ist für Dich ein passender Lösungsansatz dabei.

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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#36

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 11:18
Zitat von nahpets:
faAnyFile enthält (soweit ich weiß) bereits faReadOnly, faHidden und faArchive, liegts daran?
Solange die Attribute verodert und nicht addiert werden, kann nichts passieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#37

Re: Verzechniss: alle beinhaltenden Ordner ermitteln?

  Alt 13. Jan 2009, 11:35
DeddyH hats mal wieder gelöst Vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz