Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner nicht gleich Ordner? Gibt es Unterschiede? (https://www.delphipraxis.net/119714-ordner-nicht-gleich-ordner-gibt-es-unterschiede.html)

formosa 30. Aug 2008 10:57


Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Gibt es eigentlich Unterschiede bei Ordnern? Ich lasse mir Ordner in einem TreeView anzeigen, und folgender Code sucht nach den Ordnern:

Delphi-Quellcode:
var
  path : string;
  search : TSearchRec;
  nc : TTreeNode;

begin
  if n = nil then exit;
  path := GetDirStr(n);
    if findfirst(path + '*.*',faDirectory,search) = 0 then repeat
      if ((search.attr and fadirectory)= fadirectory)and
        (search.name <> '.')and(search.name <> '..') then
        begin
         // 
        end;
      until findnext(Search)<>0;
      findClose(Search);
end;
Das funktioniert soweit gut. Aber kürzlich habe ich es mit meinem USB Stick versucht und dabei ist mir aufgefallen das zwei Ordner nicht aufgeführt sind, normale Ordner aber schon.

Gibt es Unterschiede Bei Ordnern? Oder woran könnte es liegen?

Vielen Dank,

Chris

marabu 30. Aug 2008 11:30

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Halloo Chris,

vielleicht wurden den beiden Ordnern zusätzliche Attribute verliehen?

Delphi-Quellcode:
if FindFirst(path + '*.*', faDirectory + faSysFile + faHidden, search) = 0 then
repeat
  if ((search.attr and fadirectory) = fadirectory)
  and (Pos(search.name, '..') = 0)) then
  begin
    //
  end;
until FindNext(search) <> 0;
FindClose(search);
Freundliche Grüße

grenzgaenger 30. Aug 2008 11:37

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
prüf doch mal mit dem debugger welche attr. die ordner haben... oder lass dir die ganzen attribute in eine liste ausgeben...

dann siehst du es am schnellsten...

SirThornberry 30. Aug 2008 11:38

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
[OT]
Aber sowas sollte man doch gar keinem erst beibringen :wink:
Delphi-Quellcode:
faDirectory + faSysFile + faHidden
Durch die Compilermagic mag dies funktionieren. Aber Anfänger die ältere Versionen verwenden suchen dann ewig nach dem Fehler wenn sie sich sowas angewöhnen.

Anhand der Symbole im Screenshot vermute ich das die Attribute System und Hidden gesetzt sind und in dem Ordner eine Desktop.ini liegt.

DeddyH 30. Aug 2008 11:43

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Wieso nicht gleich faAnyFile, wenn das faDirectory-Flag anschließend ausgewertet wird?

formosa 30. Aug 2008 11:54

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Danke an alle. Hab nur faDirectory in faAnyFile geändert und es funktioniert.

Gruss Chris

Die Muhkuh 30. Aug 2008 12:41

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Zitat:

Zitat von SirThornberry
[OT]
Aber sowas sollte man doch gar keinem erst beibringen :wink:
Delphi-Quellcode:
faDirectory + faSysFile + faHidden
Durch die Compilermagic mag dies funktionieren. Aber Anfänger die ältere Versionen verwenden suchen dann ewig nach dem Fehler wenn sie sich sowas angewöhnen.

Um es noch richtig aufzuschreiben, verknüpfen von Bitmasken funktioniert mit OR und nicht mit and oder +:

Delphi-Quellcode:
faDirectory or faSysFile or faHidden

grenzgaenger 30. Aug 2008 12:50

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
kommt in diesem fall aus selbe raus, da die masken distinct sind...

DeddyH 30. Aug 2008 13:03

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Trotzdem sollte man es gleich richtig machen, sonst wundert man sich später.

marabu 30. Aug 2008 13:10

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Hallo Jens,

Zitat:

Zitat von SirThornberry
... Aber sowas sollte man doch gar keinem erst beibringen ... Durch die Compilermagic mag dies funktionieren. ...

dein Hinweis ist zwar nicht falsch, aber für einen wirklichen Anfänger mindestens so verwirrend, wie das unerwartete Ergebnis bei FindFirst(..., faHidden + faHidden, ...). Wenn du also etwas für die Ausbildung der Ungelernten tuen möchtest, dann musst du die Zusammenhänge erläutern oder einen Link setzen. Ich wollte mir das ersparen.

Mit Compiler Magic hat das Addieren von ganzzahligen Konstanten übrigens nichts zu tun. Die ODER-Verknüpfung ist vorteilhaft bei Bit-Schaltern, die im Laufe der Zeit um Aliasse oder Sammelmasken angereichert wurden. Sie schützt den Unkundigen vor Stellenüberträgen. Im vorliegenden Fall wäre die Summe von faAnyFile und einer der anderen Konstanten fatal. Übrigens auch die Delphi-Hilfe richtet sich nicht an Anfänger:

DOH - Topic Findfirst
... 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) ...


Und zur Frage von Detlef: faAnyFile ist für Schreibfaule oder solche, die Dateiattribute lieber erst gar nicht kennen lernen wollen.

Und weil du gerade nochmal etwas geschrieben hast: Richtig oder Falsch gibt es hier nicht. Wenn das richtige Ergebnis reproduzierbar ist, dann ist der Weg richtig. Du meinst bestimmt etwas anderes und hast nur die falschen Worte benutzt.

Freundliche Grüße

DeddyH 30. Aug 2008 13:24

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Hallo Achim, ich denke, Du bist "abgebrüht" genug, um zu wissen, was ich meinte. Ich wollte Dich auf gar keinen Fall angreifen ;)

Fridolin Walther 30. Aug 2008 13:37

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Naja, ich ziehe es vor im Zweifelsfall es auf die Art und Weise zu machen, die die Dokumentation vor sieht und die ist recht eindeutig:
Zitat:

Attributes can be combined by adding (Delphi) or or-ing (C++) their constants or values. For example, to search for read-only and hidden files in addition to normal files, pass (faReadOnly + faHidden) in Delphi or (faReadOnly | faHidden) in C++ as the Attr parameter. To include only normal files, pass zero for the Attr parameter.
Und um Belehrungsantworten vor zu beugen: Der Begriff Bitmask ist mir ein Begriff und ich weiß auch damit umzugehen. Wenn ihr aber mal tausende Zeilen Source wegwerfen durftet, weil einer eurer Mitentwickler meinte es besser zu wissen als die Dokumentation und sich in einem zukünftigen Release der Entwicklungstools dann etwas verändert hat, was zwar die Kompatibilität mit der in der Dokumentation vorgesehenen Methode nicht gebrochen hat, wohl aber die Kompatibilität zur "Methode" Eures werten Mitentwicklers, dann werdet ihr meine Ansicht verstehen.

Seids lieber froh das da jemand mal die Dokumentation gelesen hat und sich daran hält.

DeddyH 30. Aug 2008 13:50

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Ich habe es jetzt nicht ausprobiert, aber was passiert, wenn man dasselbe Flag versehentlich 2 mal definiert? Kriegt der Compiler das mit? Und nein, das soll jetzt kein "Diskussionsbeitrag" im Sinne von Streiten werden, sondern das interessiert mich jetzt wirklich mal.

Fridolin Walther 30. Aug 2008 13:55

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Erhälst Du eine falsche Bitmask und entsprechend ein falsches Ergebnis.

DeddyH 30. Aug 2008 13:59

Re: Ordner nicht gleich Ordner? Gibt es Unterschiede?
 
Dann frage ich mich, was gegen das "Verodern" spricht. :gruebel: Aber gut, bevor das jetzt ausufert, lassen wir es dabei bewenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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