Pfade Windows/Linux: Konvertierung

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Pfade Windows/Linux: Konvertierung

Beitrag von Ich934 »

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
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Pfade Windows/Linux: Konvertierung

Beitrag von six1 »

so in etwa:

Code: Alles auswählen

   PfadPictures:=StringReplace(extractfilepath(application.ExeName)+'Bilder\','\',Pathdelim,[rfreplaceall]);
Gruß, Michael

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Ich934 »

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 :lol:

cu tb
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
gladio
Beiträge: 217
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

Beitrag von gladio »

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.

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Ich934 »

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

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
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

Beitrag von fliegermichl »

Code: Alles auswählen

MyDir := ExtractFileExt(Application.Exename) + 'Bilder' + PathDelim;
Die Konstante PathDelim wird automatisch richtig gesetzt.
Genauso wie z.B. Zeilenumbrüche durch LineEnding richtig gesetzt werden.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Pfade Windows/Linux: Konvertierung

Beitrag von six1 »

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.
Gruß, Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
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

Beitrag von fliegermichl »

Hab grad gesehen, daß PathDelim in sysutils definiert ist.
Die eigentliche Konstante ist DirectorySeparator aus system.pas.
Der ist allerdings noch länger.

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Ich934 »

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...
Tipp für PostgreSQL: www.pg-forum.de

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Epcop »

Projekt, Projekteinstellungen, Verschiedenes:

"Speichere Pfadtrenner \ und/ ..."

Hat das hier einen Nutzen?!

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Pfade Windows/Linux: Konvertierung

Beitrag von wp_xyz »

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.

PascalDragon
Beiträge: 825
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

Beitrag von PascalDragon »

Ich934 hat geschrieben:
So 7. Mär 2021, 09:02
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...
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.
FPC Compiler Entwickler

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Pfade Windows/Linux: Konvertierung

Beitrag von wp_xyz »

PascalDragon hat geschrieben:
So 7. Mär 2021, 15:10
Ich934 hat geschrieben:
So 7. Mär 2021, 09:02
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...
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.
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).

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Ich934 »

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

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Pfade Windows/Linux: Konvertierung

Beitrag von Warf »

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:

Code: Alles auswählen

TWindowsPath('./Bilder').ToUnixPath
Siehe das letzte Beispiel in der Readme.md. Das kümmert sich auch darum das C:\... z.b. zu /... wird, etc

Antworten