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
Pfade Windows/Linux: Konvertierung
Guten Morgen,
ich entwickle gerade eine Anwendung, welche sowohl auf Windows als auch auf Linux läuft. Ein portabler Betrieb kann nicht ausgeschlossen werden und stellt an sich kein Problem dar.
Wenn ich jetzt folgende Situation habe, welche gespeichert wurde:
Pfad unter Windows: .\Bilder\
Dann habe ich natürlich unter Linux ein Problem, da ich dort ja folgendes benötige: ./Bilder/
Meine Idee war jetzt, da ich nichts gefunden habe, hier eine Funktion zu schreiben, die entsprechend dem System die "DirectorySeperators" tauscht. Das wäre keine große Sache. Aber vielleicht hat jemand hier eine andere/bessere Idee.
Vielen Dank und schöne Grüße
ich entwickle gerade eine Anwendung, welche sowohl auf Windows als auch auf Linux läuft. Ein portabler Betrieb kann nicht ausgeschlossen werden und stellt an sich kein Problem dar.
Wenn ich jetzt folgende Situation habe, welche gespeichert wurde:
Pfad unter Windows: .\Bilder\
Dann habe ich natürlich unter Linux ein Problem, da ich dort ja folgendes benötige: ./Bilder/
Meine Idee war jetzt, da ich nichts gefunden habe, hier eine Funktion zu schreiben, die entsprechend dem System die "DirectorySeperators" tauscht. Das wäre keine große Sache. Aber vielleicht hat jemand hier eine andere/bessere Idee.
Vielen Dank und schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de
Re: Pfade Windows/Linux: Konvertierung
so in etwa:
Code: Alles auswählen
PfadPictures:=StringReplace(extractfilepath(application.ExeName)+'Bilder\','\',Pathdelim,[rfreplaceall]);
Gruß, Michael
-
- 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
Im Prinzip ja.
Ich hätte halt eine Abhängigkeit vom OS gemacht und dann halt bei Windows '/' und bei Linux '\' durch den PathDelim ersetzt. Der Pfad hier war jetzt nur ein Beispiel.
Aber scheinbar gibt es keine andere/bessere Möglichkeit. Also keine fertige Funktion ala MigratePathToOSSpeicifc
cu tb
Ich hätte halt eine Abhängigkeit vom OS gemacht und dann halt bei Windows '/' und bei Linux '\' durch den PathDelim ersetzt. Der Pfad hier war jetzt nur ein Beispiel.
Aber scheinbar gibt es keine andere/bessere Möglichkeit. Also keine fertige Funktion ala MigratePathToOSSpeicifc

cu tb
Tipp für PostgreSQL: www.pg-forum.de
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Pfade Windows/Linux: Konvertierung
In Windows 10 scheint es völlig egal ob / oder \ auch gemischt im Pfad wird erkannt und akzeptiert.
Habe es gerade getestet in der Console.
Habe es gerade getestet in der Console.
-
- 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
Ja, aber ich kann nicht Windows 10 voraussetzen. Gibt noch immer Windows 8.1
Und imo ist das nur die PowerShell der das egal ist...

Tipp für PostgreSQL: www.pg-forum.de
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Pfade Windows/Linux: Konvertierung
Code: Alles auswählen
MyDir := ExtractFileExt(Application.Exename) + 'Bilder' + PathDelim;
Genauso wie z.B. Zeilenumbrüche durch LineEnding richtig gesetzt werden.
Re: Pfade Windows/Linux: Konvertierung
Das stimmt fliegermichl. Bei Pfadangaben mit nur einer Ebene ist das kürzer.
Gibt man längere Pfade an, stört mich immer das +Pathdlim, warum ich immer gleich ein StringReplace bei der Pfaddef. einsetze.
Gibt man längere Pfade an, stört mich immer das +Pathdlim, warum ich immer gleich ein StringReplace bei der Pfaddef. einsetze.
Gruß, Michael
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Pfade Windows/Linux: Konvertierung
Hab grad gesehen, daß PathDelim in sysutils definiert ist.
Die eigentliche Konstante ist DirectorySeparator aus system.pas.
Der ist allerdings noch länger.
Die eigentliche Konstante ist DirectorySeparator aus system.pas.
Der ist allerdings noch länger.
-
- 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
Ja, PathDelim etc. ist mir schon bekannt.
Mir gehts ja darum, Pfad und Linux gespeichert und Programm jetzt unter Windows geöffnet. Aber habs jetzt realisiert mit zwei strreplace und IFDEF je nach OS...
Mir gehts ja darum, Pfad und Linux gespeichert und Programm jetzt unter Windows geöffnet. Aber habs jetzt realisiert mit zwei strreplace und IFDEF je nach OS...
Tipp für PostgreSQL: www.pg-forum.de
Re: Pfade Windows/Linux: Konvertierung
Projekt, Projekteinstellungen, Verschiedenes:
"Speichere Pfadtrenner \ und/ ..."
Hat das hier einen Nutzen?!
"Speichere Pfadtrenner \ und/ ..."
Hat das hier einen Nutzen?!
Re: Pfade Windows/Linux: Konvertierung
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.
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Pfade Windows/Linux: Konvertierung
Es gilt schon seit mindestens 20 Jahren, dass es Windows egal ist, ob \ oder / genutzt wird (mit Ausnahme bestimmter Funktionalitäten, die man aber im Normalfall nicht nutzt), ich glaub sogar schon seit Windows 9x.Ich934 hat geschrieben: So 7. Mär 2021, 09:02 Ja, aber ich kann nicht Windows 10 voraussetzen. Gibt noch immer Windows 8.1Und imo ist das nur die PowerShell der das egal ist...
FPC Compiler Entwickler
Re: Pfade Windows/Linux: Konvertierung
Das kann ich so nicht unterschreiben: Hab gerade meine Virtuelle Maschine mit Win2000 aufgerufen, und direkt in einer Console "c:/Windows" eingeben und erhalte "Parameterformat nicht korrekt". Genauso wie bei Win10 nach "cmd" in der PowerShell (wo es direkt natürlich funktioniert).PascalDragon hat geschrieben: So 7. Mär 2021, 15:10Es gilt schon seit mindestens 20 Jahren, dass es Windows egal ist, ob \ oder / genutzt wird (mit Ausnahme bestimmter Funktionalitäten, die man aber im Normalfall nicht nutzt), ich glaub sogar schon seit Windows 9x.Ich934 hat geschrieben: So 7. Mär 2021, 09:02 Ja, aber ich kann nicht Windows 10 voraussetzen. Gibt noch immer Windows 8.1Und imo ist das nur die PowerShell der das egal ist...
-
- 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
Auch ich hatte da 2019 unter Windows 10 enorme Probleme. Damals noch FPC 3.0.4. Mir ist damals das Programm um die Ohren geflogen weshalb ich aus der Erfahrung raus das jetzt gleich entsprechend abfange...
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
Vor einiger Zeit hatte ich mir eine etwas größere lib geschrieben die verschiedene utilites mitbring, u.a. eine pathlib unit inspiriert von pythons pathlib. Vor kurzem hab ich dann teile der lib raus gezogen und selbständig gemacht (also sie benötigt nicht mehr den rest der lib der noch nicht fertig/auf grund eines fpc bugs nicht brauchbar ist), und die pathlib unit ist eine solche unit. Kannst es dir ja mal anschauen: Link
Für dich relevant wäre das folgende:
Siehe das letzte Beispiel in der Readme.md. Das kümmert sich auch darum das C:\... z.b. zu /... wird, etc
Für dich relevant wäre das folgende:
Code: Alles auswählen
TWindowsPath('./Bilder').ToUnixPath