Cross-Plattform-Bibliothek für die Pfade von Windows zu manipulieren?
-
12-09-2019 - |
Frage
Ich bin ein Cross-Plattform-Anwendung zu schreiben, die Windows-Pfade überprüfen muss und manipulieren.
Insbesondere für das jeweilige Problem, das ich jetzt habe, muß ich wissen, ob ein Pfad absolut oder relativ ist.
Der aktuelle Code verwendet boost::filesystem::path
natürlich, die wie ein Zauber auf Windows funktioniert:
boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }
Das Problem bei diesem Ansatz ist, dass boost::filesystem::path
hat nur zwei Modi: Muttersprache und tragbar. Dies bedeutet, dass die Windows-Pfad Grammatik nicht verfügbar ist, wenn ich unter Linux kompilieren (es wird in der Quelle #ifdef
ed out). Daher ist der Weg.: "C \ Pfad" absolute betrachtet in Windows, aber relativ in Linux
Kann euch empfehlen eine plattformübergreifende C ++ Bibliothek, die überprüfen können und Windows-Pfade manipulieren?
Für den Moment der einzige Windows-Pfad Operation ich tue, ist zu prüfen, ob ein Pfad absolut ist oder nicht.
Das Kriterium ich für einen absoluten Pfad verwenden, ist, dass es sowohl einen Laufwerksbuchstaben enthält, und der Weg beginnt mit \
. Ein Beispiel eines absoluten Pfad unter diesem Kriterium wird C:\path
. Diese sind beide Beispiele für relative Pfade unter diesem Kriterium. C:path
, \path
Lösung 2
Es scheint schwierig zu sein, eine Bibliothek für diese zu finden. Eine Möglichkeit ist PathIsRelative
in Winelib, aber ich will nicht Winelib verwenden.
I endete eine sehr spezifische Lösung auf nur tun, für diese kleine Sache zu entscheiden. Unter der Annahme, dass der Pfad korrekt ist (eine faire Annahme, in meinem Fall), ein absoluter Pfad :\
enthalten wird, während ein relativer Pfad nicht.
Also, die schlecht, aber die Arbeit, Lösung: Es gibt keine geeignete Bibliothek. Überprüfen Sie die Existenz von :\
.
Andere Tipps
Was ist QT mit QFileInfo ?
Könnten Sie näher ausführen, was das Programm gemeint ist, mit den Windows-Pfaden auf Linux zu tun?
Vielleicht ist es ausreichend, eine einfache Transformation in die Windows-Pfadzeichenfolge anzuwenden, syntaktisch es in einen Unix-Pfad transformieren, und verwenden Sie dann boost :: filesystem es zu manipulieren.