Warum werden unter Windows zusätzliche "Ordner" gefunden

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von Jorg3000 »

photor hat geschrieben: Di 8. Apr 2025, 19:04 Also dorum getestet: mit "*.*" bekomme ich unter Linux eine leere Liste zurück (ist ja auch klar; es gibt keine Ordner mit einem "." im Namen; und eine RegExp ist es ja nicht).
Oh ja stimmt, mir war die Unlogik mit dem Punkt in "*.*" schon gar nicht mehr aufgefallen, weil ich es seit CP/M (als Vorläufer von DOS) so kenne, wo es als Maske für alle Verzeichniseinträge stand.
CP/M (ab 1974) verwendete in seinem Dateisystem ein festes Namensformat von 8.3 Zeichen, das dann in der FAT (Microsoft 1977) von QDOS und MS-DOS (1981) übernommen wurde.
Oh Mann, ich habe tatsächlich in den 80ern mal mit CP/M gearbeitet! :shock:

Solange Windows noch auf DOS aufsetzte, blieb "*.*" als verpflichtende Maske, wenn man alle Verzeichniseinträge abrufen wollte, auch wenn die Namen gar keinen "." enthielten.
Angeblich soll Windows seit NT/2000 auch das logischere pure "*" verstehen, weil diese Windows-Versionen nicht mehr auf DOS aufsetzen und ein eigenes (Kommandozeilen-)Subsystem mitbringen.
Sieben hat geschrieben: Di 8. Apr 2025, 18:43 Gibt auch die Konstante AllFilesMask - Unit System - die einem Compiler-Direktiven erspart.
Habe nachgeguckt: Die Konstante AllFilesMask ist in FreePascal unter Windows auch als "*" definiert, somit scheint man auf allen modernen Systemen "*" nutzen zu können.
Aber neulich war hier im Forum doch ein Post von jemandem, der noch mit Turbo Pascal cross-kompiliert, oder? :shock:
Grüße, Jörg

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von Jorg3000 »

photor hat geschrieben: Mo 7. Apr 2025, 15:48 Der Eintrag für "KRo-Projects", der vollständig "D:\KRo-Projects" heißt, wird immer noch so - also mit Drive-Buchstaben - gefunden (war vorher weggefilter, Schuss in's eigene Knie). Seltsam, ich verstehe es nicht.
Wurde in diesem Thread jetzt eigentlich festgestellt, ob es FindAllDirectories() ist, das womöglich einen Bug hat?

Denn es ist sicherlich nicht Windows, das einen falschen Eintrag mit Laufwerksbuchstaben im puren Dateinamen liefert.

Ich habe mir die Funktion noch nicht angeguckt - aber wenn ich raten sollte, würde ich vermuten, dass ein SymLink die Funktion verwirrt oder dass einfach ein abschließender Slash fehlt o.ä.
Vielleicht finde ich heute Abend Zeit, da mal reinzugucken.

Benutzeravatar
photor
Beiträge: 507
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
CPU-Target: 64Bit

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von photor »

Jorg3000 hat geschrieben: Mi 9. Apr 2025, 08:19
photor hat geschrieben: Mo 7. Apr 2025, 15:48 Der Eintrag für "KRo-Projects", der vollständig "D:\KRo-Projects" heißt, wird immer noch so - also mit Drive-Buchstaben - gefunden (war vorher weggefilter, Schuss in's eigene Knie). Seltsam, ich verstehe es nicht.
Wurde in diesem Thread jetzt eigentlich festgestellt, ob es FindAllDirectories() ist, das womöglich einen Bug hat?

Denn es ist sicherlich nicht Windows, das einen falschen Eintrag mit Laufwerksbuchstaben im puren Dateinamen liefert.

Ich habe mir die Funktion noch nicht angeguckt - aber wenn ich raten sollte, würde ich vermuten, dass ein SymLink die Funktion verwirrt oder dass einfach ein abschließender Slash fehlt o.ä.
Vielleicht finde ich heute Abend Zeit, da mal reinzugucken.
Ich weiß nicht. Festgestellt im Sinne von "das ist ein Bug" bestimmt nicht. Ich kann das auch schlecht beurteilen - dafür verstehe ich zuwenig von Windows und dem Filesystem, um dass zu beurteilen. Für mich klingt das aber nach Bug (verglichen mit dem Linux-Ergebnis).

Falls nötig, könnte ich versuchen, ein Testprogramm zu bauen und sehen, ob ich das Verhalten damit reproduzieren kann - sinnvollerweise dann natürlich auf dem Win11- und Win10-Rechner im Büro.[*]

Ciao,
Photor

[*] Lazarus-Versionen dort 3.8 (Win11) und 3.2 (Win10). Vielleicht sollte man zuerst prüfen, ob der "Bug" auf 4.0 noch besteht.

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von Jorg3000 »

Tach nochmal!
Habe in den Quellcode der Unit FileUtil geschaut ... Ich glaube du rufst die Funktion einfach falsch auf! 8)

Code: Alles auswählen

LoadcasesDirs := FindAllDirectories(MasterDir,False,PathDelim);
Der letzte Parameter soll NICHT der DirectorySeparator (=PathDelim) sein, sondern ist per Default = ";" (Semikolon).
Damit ist gemeint, dass man als ersten Parameter einen String mit einer Aufzählung mehrerer Verzeichnisse angeben kann, die per Semikolon getrennt sind.

Dadurch, dass du aber PathDelim (=DirectorySeparator) angibst, wird der Laufwerksbuchstabe vom Rest abgetrennt und deshalb das Root-Verzeichnis des Laufwerks (D:?) durchsucht.
Deshalb erhältst du die für Root typischen System-Ordner und "D:\KRo-Projects", obwohl du gar nicht Root betrachten wolltest.
photor hat geschrieben: Mo 7. Apr 2025, 15:48 PS: Linux, ich will nur noch Linux. SCNR
Also an Windows lag es nicht.

Benutzeravatar
photor
Beiträge: 507
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
CPU-Target: 64Bit

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von photor »

Jorg3000 hat geschrieben: Mi 9. Apr 2025, 19:00 Tach nochmal!
Habe in den Quellcode der Unit FileUtil geschaut ... Ich glaube du rufst die Funktion einfach falsch auf! 8)

Code: Alles auswählen

LoadcasesDirs := FindAllDirectories(MasterDir,False,PathDelim);
Der letzte Parameter soll NICHT der DirectorySeparator (=PathDelim) sein, sondern ist per Default = ";" (Semikolon).
Damit ist gemeint, dass man als ersten Parameter einen String mit einer Aufzählung mehrerer Verzeichnisse angeben kann, die per Semikolon getrennt sind.

Dadurch, dass du aber PathDelim (=DirectorySeparator) angibst, wird der Laufwerksbuchstabe vom Rest abgetrennt und deshalb das Root-Verzeichnis des Laufwerks (D:?) durchsucht.
Deshalb erhältst du die für Root typischen System-Ordner und "D:\KRo-Projects", obwohl du gar nicht Root betrachten wolltest.
OK. Dann habe ich das eventuell falsch interpretiert (und ich meine, auch ein Beispiel gesehen zu haben).

Ich werde das morgen mal testen. Wenn das so ist, werde ich versuchen, das ganze zu verstehen.
Jorg3000 hat geschrieben: Mi 9. Apr 2025, 19:00
photor hat geschrieben: Mo 7. Apr 2025, 15:48 PS: Linux, ich will nur noch Linux. SCNR
Also an Windows lag es nicht.
DER Wunsch bleibt aber bestehen. Mit Windows werde ich nicht Freund.

Ciao,
Photor

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von Mathias »

DER Wunsch bleibt aber bestehen. Mit Windows werde ich nicht Freund.
Dies ist bei mir schon lange so, die Distanz wird immer grösser.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von af0815 »

Bei windows schaue ich IMMER auf der Kommandozeile, wie das Ergebnis von "dir" ist. Weil Windows mit seinem Explorer ist dafür bekannt, jede Menge an Änderungen anzuzeigen. Das was man im Dateiexplorer sieht ist nicht immer das was wirklich auf der Platte ist. Ausserdem kann der Explorer nicht mit einer riesen Menge an Verzeichniseinträgen umgehen, wie ich feststellen musste. Auf der Kommandozeile hat das immer das angezeigt was Sache ist und hat auch mit dem Ergebnissen in Lazarus/FPC zusammengepasst.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
photor
Beiträge: 507
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
CPU-Target: 64Bit

Re: Warum werden unter Windows zusätzliche "Ordner" gefunden

Beitrag von photor »

Jorg3000 hat geschrieben: Mi 9. Apr 2025, 19:00 Tach nochmal!
Habe in den Quellcode der Unit FileUtil geschaut ... Ich glaube du rufst die Funktion einfach falsch auf! 8)

Code: Alles auswählen

LoadcasesDirs := FindAllDirectories(MasterDir,False,PathDelim);
Der letzte Parameter soll NICHT der DirectorySeparator (=PathDelim) sein, sondern ist per Default = ";" (Semikolon).
Du hast vollkommen Recht. Ich hab's probiert. Mit dem ";" als 3. Parameter funktioniert es auf Win10, Win11 und auf Linux.

Dank an alle, die mich auf den richtigen Pfad gebracht haben.

Jorg3000 hat geschrieben: Mi 9. Apr 2025, 19:00 Also an Windows lag es nicht.
Nee. Der Fehler saß wohl auch diesmal vor(!) dem Computer. Kommt vor, sorry.

Ciao,
Photor

Antworten