AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Durchsuchen eines Ordners nach Ordnern schlägt fehl
Thema durchsuchen
Ansicht
Themen-Optionen

Durchsuchen eines Ordners nach Ordnern schlägt fehl

Ein Thema von xZise · begonnen am 20. Apr 2007 · letzter Beitrag vom 20. Apr 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 14:46
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) = '.m2mthen
            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;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 14:55
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 !!!
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 15:01
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 18:29
Mit "or" funktionierts...
Aber eine Frage zu Jens:
Wie kann ich den Überprüfen, ob es nun ein Ordner ist?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 18:32
if ((sr.Attr and faDirectory) = faDirectory) then // Directory
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Durchsuchen eines Ordners nach Ordnern schlägt fehl

  Alt 20. Apr 2007, 18:44
Moin shmia,

Zitat von shmia:
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 !!!
Also das hätte ich jetzt anders kommentiert

Delphi-Quellcode:
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 !!!
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.
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.
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 14:11 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