Pfade Windows/Linux: Konvertierung
-
- Lazarusforum e. V.
- Beiträge: 367
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: Pfade Windows/Linux: Konvertierung
Prima. Die kann ja noch mehr wie meine kleine Funktion. Dankeschön!
Tipp für PostgreSQL: www.pg-forum.de
Re: Pfade Windows/Linux: Konvertierung
Diesen Beitrag hat anscheinend niemand gelesen...wp_xyz hat geschrieben: So 7. Mär 2021, 10:53 Ich weiß nicht, wann das eingeführt wurde, aber ein aktueller Lazarus (2.0.10) passt die Pfad-Trenner automatisch ans Zielbetriebssystem an (getestet auch auf einer VM mit Win2000), wobei allerdings mein Eindruck ist, dass der Windows-Backslash von Linux nicht immer akzeptiert wird. Daher würde ich vorschlagen, du nimmst konsequent den Linux-Slash, dann bist du auf der sicheren Seite.
Im beigefügten Windows-Projekt wird an drei Beispielen der "falsche" Slash verwendet, und der wird automatisch gegen den Backslash ausgetauscht. Das funktioniert zurück bis mindestens Laz 1.8.4 .
Welche Beispiel hast du denn im Sinn, bei dem unbedingt von dir selbst eine Ersetzung des Pfadtrenners vorgenommen werden muss?
- Dateianhänge
-
windows_slash.zip
- (2.15 KiB) 72-mal heruntergeladen
-
- Lazarusforum e. V.
- Beiträge: 367
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: Pfade Windows/Linux: Konvertierung
Naja wie im Ursprungsthread geschrieben. Benutzer arbeitet unter Windows, speichert den Pfad, startet unter Linux und dann muss der Pfad entsprechend konvertiert werden.
Schau mir das nochmals genau an. Aber wie gesagt gab es da vor zwei Jahren bei mir Probleme...
Schau mir das nochmals genau an. Aber wie gesagt gab es da vor zwei Jahren bei mir Probleme...
Tipp für PostgreSQL: www.pg-forum.de
-
- Beiträge: 2122
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Pfade Windows/Linux: Konvertierung
Das ist soweit ich weiß ein windows feature, das windows in einigen high level APIs mittlerweile (relative) Unix Pfade erlaubt. Aber drauf verlassen würde ich mich nicht. Durch die Rückwärtskompatibilität von Windows, stellt windows einige alte APIs bereit die nie upgedated wurden, und bei einigen low level APIs funktioniert das auch nicht.
Es ist zwar recht selten das man mal was findet was ein problem mit Unix pfaden hat, wenn dann sucht man sich aber z.T. dumm und dämlich nach dem Fehler. Gleichzeitig geben dir die Windows APIs dann aber Windows pfade zurück, und so kam ich auch schon dazu das ich pfade hatte bei denen nach dem konkatinieren die hälfte des pfades windows und die andere hälfte unix style war. Spätestens wenn du pfadinformationen vom system bekommst, musst du also eine konvertierung vornehmen.
Außerdem ist das auch nur auf windows der fall. Auf POSIX systemen werden Windows Pfade nicht erkannt, tatsächlich kannst du auf einigen systemen (ich glaube Linux) einfach \ als Dateinamen verwenden.
Langer rede kurzer Sinn, du kannst, solang du ausschließlich relative pfade verwendest, zwar theoretisch Unix Pfade (mit /) nehmen, während das die meißte zeit zwar wunderbar funktioniert kann bei manchen Windows API calls kann das in die hose gehen, d.h. man muss was das angeht eventuell ein bisschen aufpassen, aber vor allem muss man alle pfade die als input reinkommen (z.b. von APIs, oder Nutzern, etc.) dann dennoch in Unix Pfade konvertieren. Ums konvertieren kommt man also nicht drum rum
Es ist zwar recht selten das man mal was findet was ein problem mit Unix pfaden hat, wenn dann sucht man sich aber z.T. dumm und dämlich nach dem Fehler. Gleichzeitig geben dir die Windows APIs dann aber Windows pfade zurück, und so kam ich auch schon dazu das ich pfade hatte bei denen nach dem konkatinieren die hälfte des pfades windows und die andere hälfte unix style war. Spätestens wenn du pfadinformationen vom system bekommst, musst du also eine konvertierung vornehmen.
Außerdem ist das auch nur auf windows der fall. Auf POSIX systemen werden Windows Pfade nicht erkannt, tatsächlich kannst du auf einigen systemen (ich glaube Linux) einfach \ als Dateinamen verwenden.
Langer rede kurzer Sinn, du kannst, solang du ausschließlich relative pfade verwendest, zwar theoretisch Unix Pfade (mit /) nehmen, während das die meißte zeit zwar wunderbar funktioniert kann bei manchen Windows API calls kann das in die hose gehen, d.h. man muss was das angeht eventuell ein bisschen aufpassen, aber vor allem muss man alle pfade die als input reinkommen (z.b. von APIs, oder Nutzern, etc.) dann dennoch in Unix Pfade konvertieren. Ums konvertieren kommt man also nicht drum rum