ifstream und Sonderzeichen im Dateiname
-
Hallo,
ich lese eine Textdatei mit ifstream ein, was soweit auch funktioniert.
Nur leider läuft meine Software jetzt unter anderem auf einem Rechner in der Tschechei und dort ist im Dateipfad ein Sonderzeichen (š) enthalten. Wenn ich hierifsCSVDatei.open(Datei.c_str(), ios::in);
in der Variable Datei dieses Sonderzeichen enthalten habe, dann kann der die komplette Datei nicht öffnen. Dies hat ja nichts mit Zeichencodierung innerhalb der Datei zu tun, ich fürchte, dass das open nicht mit dem Sonderzeichen zurecht kommt.
Kann mir jemand einen Tipp geben, wie ich die Textdatei in einem solchen Ordner öffnen kann?Danke.
Gruß,
Florian
-
@florianwolf sagte in ifstream und Sonderzeichen im Dateiname:
ifsCSVDatei.open(Datei.c_str(), ios::in);
Wird wohl nichts mit dem eigentlichen Problem zu tub haben, aber mit einem auch nur halbwegs aktuellen Compiler (C++ 11 ) funktioniert
ifsCSVDatei.open(Datei, ios::in);
.Wie kommt denn der Dateiname in den String? Enthält der String UTF-8?
-
Es hat schon mit Encoding zu tun, denn
std::ifstream
basiert auf ASCII.Als Alternative gibt es u.a.:
- nutze std::wifstream
- unter Visual Studio gibt es eine Überladung für
open
mit einemwchar_t*
- nutze
<boost/nowide>
s.a. How to open an std::fstream (ofstream or ifstream) with a unicode filename?
-
@th69 sagte in ifstream und Sonderzeichen im Dateiname:
Es hat schon mit Encoding zu tun, denn
std::ifstream
basiert auf ASCII.wobei das nur für Windows gilt. Z.b. Unter linux kannst du hier auch einen utf8 kodierten string übergeben.
-
Seit C++17 gibts wohl ne plattfoemunabhängige Lösung. Neue Konstruktoren für ifstreams und die Filesystem lib:
https://en.cppreference.com/w/cpp/filesystem/path/path
Siehe den 7. Konstruktor.