boost :: Dateisystem und Unicode unter Linux und Windows

9

Das folgende Programm kompiliert in Visual Studio 2008 unter Windows, beide mit Zeichensatz "Unicode-Zeichensatz verwenden" und "Multi-Byte-Zeichensatz verwenden". Es kompiliert jedoch nicht unter Ubuntu 10.04.2 LTS 64-bit und GCC 4.4.3. Ich benutze Boost 1.46.1 in beiden Umgebungen.

%Vor%

Der Kompilierfehler unter Linux ist:

test.cpp: 6: Fehler: keine Übereinstimmung für 'operator & lt; & lt;' in 'std :: wcout & lt; & lt; p.boost :: filesystem3 :: pfad :: native () '

Es sieht so aus, als ob boost :: filesystem unter Linux in path :: native () keine breite Zeichenfolge liefert, obwohl boost :: filesystem :: path mit einer breiten Zeichenfolge initialisiert wurde. Außerdem vermute ich, dass Linux UTF-8 und Windows UTF-16 als Standard verwendet.

Also meine erste Frage ist, wie schreibe ich ein Programm, das boost :: filesystem und unterstützt Unicode-Pfade auf beiden Plattformen?

Zweite Frage: Wenn ich dieses Programm unter Windows ausführe, gibt es aus:

%Vor%

Nach meinem Verständnis sollte die native () -Methode den Pfad unter Windows in das native Format konvertieren, wobei Backslashes anstelle von Schrägstrichen verwendet werden. Warum kommt die Zeichenfolge im POSIX-Format?

    
Roger Dahl 15.03.2011, 02:58
quelle

3 Antworten

2

Ihr Verständnis von native ist nicht vollständig korrekt:

Natives Pfadnamenformat: Ein Implementierungsdefiniertes Format. [Hinweis: Bei POSIX-ähnlichen Betriebssystemen entspricht das native Format dem generischen Format. Unter Windows ähnelt das systemeigene Format dem generischen Format, aber die Trennzeichen für Verzeichnisse können entweder Schrägstriche oder Backslashes sein. --Anmerkung]

von Referenz

Dies liegt daran, dass Windows Pfadnamen im POSIX-Stil zulässt, so dass die Verwendung von native() keine Probleme mit den oben genannten verursacht.

Da Sie oft ähnliche Probleme mit Ihrer Ausgabe bekommen, denke ich, dass der beste Weg wäre, Ihren Präprozessor zu verwenden, d. h .:

%Vor%

und etwas ähnliches für die String-Klasse.

    
filmor 15.03.2011 08:59
quelle
1

Wenn Sie die breiten Ausgabeströme verwenden möchten, müssen Sie in eine breite Zeichenfolge konvertieren:

%Vor%

Beachten Sie, dass AFAIK, das wcout verwendet, unter Windows keine Unicode-Ausgabe bereitstellt. Sie müssen stattdessen wprintf verwenden.

    
Philipp 15.03.2011 14:37
quelle
0

Versuchen Sie Folgendes:

%Vor%     
Magnetron 13.08.2012 07:43
quelle