2008-09-23 7 views
12

Gibt es C++ GNU-Standalone-Klassen, die Pfade plattformübergreifend behandeln? Meine Anwendungen bauen auf Windows und Linux auf. Unsere Konfigurationsdateien beziehen sich auf eine andere Datei in einem separaten Verzeichnis. Ich würde gerne in der Lage sein, den Pfad für die andere Konfigurationsdatei in eine Klasse zu lesen, die sowohl unter Linux als auch unter Windows funktionieren würde.Umgang mit Dateipfaden über Plattform

Welche Klasse bietet den geringsten Platzbedarf für die Übertragung von Pfaden, die auf beiden Systemen verwendet werden können? Danke

Antwort

9

Sofern Sie keine absoluten Pfade verwenden, müssen Sie gar nicht übersetzen - Windows wandelt Schrägstriche automatisch in umgekehrte Schrägstriche um. Wenn Sie also relative Pfade mit Trennzeichen für Schrägstriche verwenden, sind Sie golden. Sie sollten wirklich absolute Pfade möglichst vermeiden.

+0

Für die einfache Notwendigkeit, die ich habe, ist dies perfekt. – Superpolock

+1

nicht portierbar auf Betriebssystemen mit verschiedenen Escape-, Anführungszeichen- und Begrenzerregeln (z., Mac) – jwfearn

0

Es gibt viele Möglichkeiten, IMHO die richtige Antwort ist, um Ihr Programm neu zu entwerfen, um zu vermeiden, Pfade zu manipulieren. Ich habe hier eine Antwort geschrieben: https://stackoverflow.com/a/40980510/2345997 was relevant ist.

Möglichkeiten:

  1. eine Befehlszeilenoption hinzufügen, die ein Benutzer den Pfad in Frage, anstatt es zu Lesen aus einer Konfigurationsdatei angeben kann.
  2. Fügen Sie eine Befehlszeilenoption hinzu, damit der Benutzer einen Basispfad angeben kann. Pfade in der Konfigurationsdatei werden als unter diesem Basispfad liegend interpretiert.
  3. Teilen Sie Ihre Konfigurationsdatei in drei. Eine Datei wird plattformübergreifend konfiguriert, eine andere Datei wird nur für Windows konfiguriert und eine letzte Datei wird nur für Linux konfiguriert. Dann kann der Benutzer den korrekten Pfad für Windows und Linux angeben. Unter Windows liest Ihr Programm die plattformübergreifende Konfigurationsdatei und die Windows-Konfigurationsdatei. Unter Linux liest es die plattformübergreifende Datei und die Nur-Linux-Konfigurationsdatei.
  4. Fügen Sie der Analyse Ihrer Konfigurationsdatei Vorverarbeitung hinzu. Dies ermöglicht Ihnen, eine Konfigurationsdatei zu haben, in der der Benutzer Ihr Programm veranlassen kann, einige der Zeilen in der Datei zu ignorieren, abhängig davon, auf welchem ​​Betriebssystem das Programm läuft. Daher kann der Benutzer den Pfad zur Datei zweimal angeben. Einmal für Linux und einmal für Windows.
  5. Ändern Sie den Entwurf so, dass sich die Dateien immer im selben Verzeichnis wie Ihre ausführbare Datei befinden - dann gibt der Benutzer nur Dateinamen in der Konfigurationsdatei statt Pfade zu Dateien an.
  6. Verwenden Sie eine einfache Funktion, die "/" auf "\" schaltet. Dokumentieren Sie dann dem Benutzer, dass sie Pfade als Linux-Pfade angeben müssen, und diese Umwandlung wird für Windows angewendet.
  7. Erstellen Sie Ihren eigenen Pfad Mini-Sprache dafür und dokumentieren Sie es dem Benutzer. Bsp .: "/" - gibt ein Verzeichnistrennzeichen an, {root} - expandiert zum root des Dateisystems, {cwd} - expandiert zum aktuellen Verzeichnis, {app} - expandiert zum Pfad zu Ihrer Anwendung etc ... Dann das Der Benutzer kann auf beiden Plattformen Dateipfade wie: {root} /myfiles/bob.txt angeben.
  8. Einige Pfade funktionieren auf beiden Plattformen. ZB: relative Pfade wie ../my files/bill.txt. Beschränken Sie Ihre Anwendung so, dass sie nur mit diesen Pfaden arbeitet. Dokumentieren Sie diese Einschränkung und wie Ihre Anwendung Pfade zum Benutzer verarbeitet.