Dateien/Verzeichnisse eindeutíg bestimmen
-
Hallo,
ich habe folgende Funktion aus dem Forum ausgegraben und ein wenig modifiziert. Es sollen alle Dateien in ein StringGrid geschrieben werden und alle Verzeichnisse in ein extra StringGrid. Nun ist mir aufgefallen, dass ich Verzeichnisse auf meiner Festplatte haben die in das StringGrid für Dateien geschrieben werden, weil sie das faAnyFile-Attribut besitzen aber nicht das faDirectory-Attribut.Was hat es mit den Verzeichniss auf sich?
Wie kann ich eindeutig Dateien und Verzeichnisse unterscheiden?void TForm1::DataSuche(AnsiString pfad) { TSearchRec sr; pfad += "\\"; if (FindFirst(pfad + "*", faAnyFile, sr) == 0)//fAnyFile:jede Datei wird gesucht { do { if ((sr.Name != ".")&&(sr.Name != "..")) //. und .. werden nicht berücksichtigt (sonst habt ihr in euren .txt dateien jede menge . bzw. ..) { if (sr.Attr == faDirectory) //wenn das Attr. ein Ordner ist { StringGrid2->Cells[0][StringGrid2->RowCount - 1] = pfad + sr.Name; //wenn nicht ist es eine datei und wird in die .txt datei geschrieben StringGrid2->RowCount += 1; DataSuche(pfad+sr.Name); //wird dieser ordner wieder nach dateien durchsucht } else { StringGrid1->Cells[0][StringGrid1->RowCount - 1] = pfad + sr.Name; //wenn nicht ist es eine datei und wird in die .txt datei geschrieben StringGrid1->RowCount += 1; } } } while (FindNext(sr) == 0); FindClose(sr); } }
-
Lies in der Hilfe zu TSearchRec noch mal nach, wie man die Attribute auswertet.
Ein Verzeichnis ohne Verzeichnis-Attribut ist kein Verzeichnis.

-
Ich weiß das es sich komisch anhört, aber es ist eindeutig ein Ordner.
Aber er stimmt der Abfrage des faDirectory-Attribut nicht überein und wird somit in das StringGrid für Dateinen reingeschrieben.
Fals jemand ähnliches aufgefallen ist, bin ich sehr dankbar für jeden Hinweis.
-
Hatte auch mal so einen Fall. Ordner wurde nicht als Ordner erkannt. Habe den Ordner neu erstellt (also umbenannt, neuen Ordner gleichen Namens erstellt und dann den Inhalt wieder reinkopiert) und dann funktionierte es. Wenn ich mich recht entsinne war es ein Ordner, der aus einer im Internet geladenen zip Datei stammte, jedenfalls war der Ordner nicht auf meinem system erstellt worden.
-
Ich habe nun festgestellt das folgende Ordner aus "Eigene Dateien" nicht als Ordner erkannt werden: Eigene Bilder, Eigene Video, Eigene Musik
Nun Eigene Bilder, Eigene Videos und Eigene Musik sind eindeutig Ordner, wie jeder selbst weiß. Aber was ist der unterschied zu den Ordner die ich mit den faDirectory-Attribut eindeutig als Ordner bestimmen kann?
Eigene Bilder, Eigene Videos und Eigene Musik scheinen kein faDirectory-Attribut zu besitzen. Wie kann man das Problem lösen, das auch diese Ordner eindeutig als Ordner erkannt werden?
Ich habe mit den Attributen lange rumexperimentiert, aber leider keine Lösung gefunden.
Bin sehr dankbar für jeden der dazu etwas beitragen kann.
-
TimonVogt schrieb:
Nun Eigene Bilder, Eigene Videos und Eigene Musik sind eindeutig Ordner, wie jeder selbst weiß.
Und sie werden mit faDirectory auch problemlos aufgelistet oder ausgefiltert, wenn man es richtig auswertet.
-
Hallo
if (sr.Attr == faDirectory)Das ist eine schlechte Abfrage. Hier geht es nicht um einzelne Konstanten, sondern um komplexe Bitmasken. Wenn zum Beispiel ein Verzeichnis auch noch schreibgeschützt ist wirst du hier ein false als Ergebnis bekommen.
Deshalb must du so vergleichen :if (sr.Attr &= faDirectory)bis bald
akari
-
Spielverderber!

Ausserdem ist das '=' überflüssig.
-
Hallo
Na ich glaub nur wenige Fragesteller hier wissen was Bitmaipulationen und Bitmasken sind... da ist doch etwas mehr Nachhilfe nötig. Auch wenn ich glaube das es eigentlich im Beispiel aus der BCB-Hilfe richtig erklärt wird...
Ja das = ist doch nicht nötig... aber wenigstens etwas bekanntes

bis bald
akari