Ordner mit Umlauten per ofstream?
-
pfad += "ü"; // !
-
Wieso sollte das gehen? Ist doch dasselbe wie die erste Version die ich oben gepostet hab. Geht auch nicht.
-
Probier es aus!
-
Hab ich schon, ich sag ja: geht auch nicht.
Ich habs genauso gemacht wie du es gepostet hast, es ging nicht.
-
Incocnito schrieb:
Hallo!
Ich versuche gerade in einem Ordner mit Umlauten wie ä, ü und ö eine Datei zu schreiben. Allerdings mag er beide Varianten von mir nicht:
ofstream datei; datei.open("C:/Pfad/OrdnerMitü/datei.txt", ios::app); //datei wird nicht erstellt
ofstream datei; string pfad; pfad += "EinPfad/OrdnerMit"; pfad += static_cast<char>(129); //'ü' pfad += "/datei.txt"; datei.open(pfad.c_str(), ios::app); //datei wird nicht erstellt
Wie soll das gehen? Mir würde jetzt nichts einfallen.
Wenn im Laufwerk C: ein Ordner "Pfad" existiert und in diesem Ordner
ein Ordner "OrdnerMitü" vorhanden ist, geht das immer.
-
Dann probiere es mal mit:
ofstream datei; string pfad; pfad += "EinPfad/OrdnerMit"; pfad += 0xc3; pfad += 0xbc; //'ü' pfad += "/datei.txt"; datei.open(pfad.c_str(), ios::app);
Das 'ü' ist jetzt als UTF-8 kodiert.
-
Und warum gehts dann nicht?
-
std::ofstream datei; datei.open("C:/Pü/datei.txt", std::ios::app);
Hat bei mir funktioniert.
-
Vielleicht bekommt dein Compiler das mit den Umlauten nicht richtig hin. Schreib mal den Pfad in eine Datei, ließ die mit deinem Programm aus und verwende den Pfad.
-
Ich unterstelle mal das hier real getestet wird.
Vielleicht sollten wir mal die Testumgebung, also Betriebssystem und Compiler benennen.
Ich weiss z.B. nicht wie weit Windows da heute ist. In der Vergangenheit soll es so gewesen sein, das zwar das Dateisystem mehr bezüglich der Umlaute beherrschte als einige Windowsprogramme anschliessend darstellen konnten. Also auch Schnellschüsse bei Test mit Vorsicht deuten.MfG f.-th.
-
Mach mal den Anfang:
#include <iostream> #include <fstream> int main() { std::ofstream datei; // datei.open("C:/Pfad/OrdnerMitü/datei.txt", std::ios::app); // Tests bau ich nicht gern am Laufwerk std::cout << "Ein Unterverzeichnis Böm sollte im Ordner des ausführenden Programmes existieren" << std::endl; datei.open("Böm\\dädü.txt", std::ios::app); // Datei wird erstellt, wenn der Pfad/Ordner existiert // Test: OS->W2k, Compiler gcc 4.5.0 und dmc 8.52 // Slash + Doppel-Backslash funktionieren }
MfG f.-th.