![]() |
Durchsuchen eines Ordners nach Ordnern schlägt fehl
Ich durchsuche mit folgenden Code meine Ordner, und die Ordner des Ordners... Dummerweise erkennt er aber nur eine Datei, obwohl es im übergeben Ordner noch ein weiterer Ordner existiert.
Delphi-Quellcode:
procedure TForm1.ReloadMemos(APath : string; AParent : TTreeNode);
var sr : TSearchRec; begin if FindFirst(APath + '*', faAnyFile + faDirectory, sr) = 0 then try repeat case sr.Attr of faDirectory : begin ReloadMemos(APath + sr.Name + '\', tvMemolist.Items.AddChild(AParent, sr.Name)); end; else begin if ExtractFileExt(sr.Name) = '.m2m' then begin tvMemolist.Items.AddChild(AParent, Copy(sr.Name, 1, Length(sr.Name) - 4)); end; end; end; until FindNext(sr) <> 0; finally FindClose(sr); end; end; |
Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl
Die fa-Konstanten dürfen nicht addiert sondern nur mit and, or oder xor verknüpft werden!
Delphi-Quellcode:
if FindFirst(APath + '*', faAnyFile + faDirectory, sr) = 0 then // Falsch !!!!
if FindFirst(APath + '*', faAnyFile or faDirectory, sr) = 0 then // Richtig !!! |
Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl
zudem solltest du nicht prüfen ob das Attribut = faDirectory ist denn das Attribut kann faDirectory, faArchive, faReadOnly etc. haben. Hat also mehrere Flags gesetzt. So ist unter XP, wenn du mal im Eigenschaften-Dialog eines Ordners die Attribute anschaust, so ziemlich immer das Schreibgeschützt-Flag (faReadOnly) gesetzt. Und somit ist das Attribut nicht mehr faDirectory sondern "faDirectory + faReadOnly". Wie gesagt musst du schauen ob das entsprechende Bit gesetzt ist und nicht ob Attribute einen festen Wert haben.
|
Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl
Mit "or" funktionierts...
Aber eine Frage zu Jens: Wie kann ich den Überprüfen, ob es nun ein Ordner ist? |
Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl
Delphi-Quellcode:
;)
if ((sr.Attr and faDirectory) = faDirectory) then // Directory
|
Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl
Moin shmia,
Zitat:
Delphi-Quellcode:
Beim ersten "Ganz falsch", weil es keinen Sinn macht "Alles" (faAnyFile) noch mit einem, wie auch immer gearteten, weiteren Attribut zu verknüpfen. Dank der Addition kommt sogar etwas ungültiges für den Attributwert heraus.
if FindFirst(APath + '*', faAnyFile + faDirectory, sr) = 0 then // Ganz falsch !!!!
if FindFirst(APath + '*', faAnyFile or faDirectory, sr) = 0 then // Funktioniert, ist so aber unnötig !!! Die Begründung für den zweiten Kommentar kann man auch schon aus dem ersten ablesen. Das Bit, dass durch die Veroderung mit faDirectory garantiert gesetzt werden würde ist in faAnyFile schon gesetzt. Wozu würdest Du denn den Wert mit XOR verknüpfen? Ich vermute mal stark, dass Du AND NOT meintest, um ein Bit garantiert zu löschen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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