AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [gelöst] TFindFile-Komponente - Nur Verzeichnisse listen?
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] TFindFile-Komponente - Nur Verzeichnisse listen?

Ein Thema von scrat1979 · begonnen am 1. Jan 2008 · letzter Beitrag vom 1. Jan 2008
Antwort Antwort
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

[gelöst] TFindFile-Komponente - Nur Verzeichnisse listen?

  Alt 1. Jan 2008, 20:42
Hallo zusammen,

ich habe auf einer Delphi-Seite folgenden Komponentenquellcode gefunden, der mir alle Dateien/Verzeichnisse ( auch nach Attributen gefiltert ) ausgibt. So weit ist alles klar. Ich habe in meinen Programmen ähnliche Routinen (Dateien ODER Ordner listen) schon x-mal erfolgreich benutzt, daher ist mir der Code auch vollkommen verständlich. Nur eines begrife ich nicht: Wenn ich alls Attribut NUR "ffaDirectory" auf true setze, dann listet die Komponente mir eben nicht nur Verzeichnisse auf - warum auch immer. Hatte bei mir dasselbe Problem. Ich habe es so gelöst, daß in diesem Falle eine extra "Ordner-Listen-Funktion" aufgerufen wurde, in der alle Dateien herausgelöscht wurden, wenn dieses Flag gesetzt wurde. Ich hoffe das Problem ist verständlich beschrieben. Gibt es dafür eine einfache Lösung ( wenn nur ffaDirectory = true dann auch wirklich nur Verzeichnisse listen ) oder liegt es an den Attributen an sich?

Hier mal ein Ausschnitt der Unit:

Delphi-Quellcode:
unit FindFile;

[...]

type
  TFileAttrKind = (ffaReadOnly, ffaHidden, ffaSysFile, ffaVolumeID, ffaDirectory, ffaArchive, ffaAnyFile);
  TFileAttr = set of TFileAttrKind;

[...]

procedure TFindFile.FileSearch(const InPath : string);
var Rec : TSearchRec;
    Attr : integer;
begin
Attr := 0;
if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly;
if ffaHidden in FileAttr then Attr := Attr + faHidden;
if ffaSysFile in FileAttr then Attr := Attr + faSysFile;
if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
if ffaDirectory in FileAttr then Attr := Attr + faDirectory;
if ffaArchive in FileAttr then Attr := Attr + faArchive;
if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile;

if SysUtils.FindFirst(inPath + FileMask, Attr, Rec) = 0 then
 try
   repeat
     s.Add(inPath + Rec.Name);
   until SysUtils.FindNext(Rec) <> 0;
 finally
   SysUtils.FindClose(Rec);
 end;

If not InSubFolders then Exit;

if SysUtils.FindFirst(inPath + '*.*', faDirectory, Rec) = 0 then
 try
   repeat
   if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') then
     begin
       FileSearch(IncludeTrailingBackslash(inPath + Rec.Name));
     end;
   until SysUtils.FindNext(Rec) <> 0;
 finally
   SysUtils.FindClose(Rec);
 end;
end;

end.

{
********************************************
Zarko Gajic
About.com Guide to Delphi Programming
[url]http://delphi.about.com[/url]
email: [email]delphi.guide@about.com[/email]
free newsletter: [url]http://delphi.about.com/library/blnewsletter.htm[/url]
forum: [url]http://forums.about.com/ab-delphi/start/[/url]
********************************************
}
//EDIT: Anbei der Quelltext der Komponente
Angehängte Dateien
Dateityp: zip tfindfile_206.zip (1,3 KB, 6x aufgerufen)
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TFindFile-Komponente - Nur Verzeichnisse listen?

  Alt 1. Jan 2008, 20:55
Zitat von Delphi-Hilfe:
Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden:
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TFindFile-Komponente - Nur Verzeichnisse listen?

  Alt 1. Jan 2008, 21:14
Zitat von sirius:
Zitat von Delphi-Hilfe:
Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden:
Vielen Dank für die Antwort. Dann wäre wohl alles gesagt, bis auf die Tatsache, daß meine Delphi-Hilfe ( Turbo Delphi Pro am Laptop ) eben diesen Satz nicht enthält - oder ich bin total blind
Michael Kübler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [gelöst] TFindFile-Komponente - Nur Verzeichnisse listen

  Alt 1. Jan 2008, 21:42
Moin Michael,

die Unit, die Du da hast, enthält eine böse Macke:
Flags sollte man niemals mit + verknüpfen, sondern mit OR.

Wenn man sich die Zahlenwerte dahinter schreibt, und mal nachrechnet, wird auch klar warum:

Delphi-Quellcode:
Attr := 0;
if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly; // Wert: $00000001
if ffaHidden in FileAttr then Attr := Attr + faHidden; // Wert: $00000002
if ffaSysFile in FileAttr then Attr := Attr + faSysFile; // Wert: $00000004
if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID; // Wert: $00000008
if ffaDirectory in FileAttr then Attr := Attr + faDirectory; // Wert: $00000010
if ffaArchive in FileAttr then Attr := Attr + faArchive; // Wert: $00000020
if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile; // Wert: $0000003F
Werden alle Werte angegeben, so ergibt sich beim aufsummieren der Wert $7E, werden die Werte verknüpft, so ist es $3F.
faAnyFile entspricht nämlich schon der Oder-Verknüpfung aller übrigen Werte. Legt man diesen Wert noch einmal mit OR-Verküpft drauf, passiert nichts weiter, bei + erhält man einen ungültigen Wert.
(Ich weiss, in der Delphi-Hilfe steht es auch so, aber dadurch wird es nicht richtiger )
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:29 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