ofstream und Unicode
-
Hallo zusammen,
nachdem ich von Onkel Google keine gescheite Hilfe bekommen habe hoffe ich das ihr mir weiter Helfen könnt.
folgendes gibt einen Fehler:
FileName="c:\\test"; std::wofstream file(FileName.c_str());
Zugriff Überlauf im Prozess: Versuch, auf 520 Byte(s) an 0x0761DEAC zuzugreifen., an Offset 12 in Heap Block 0x0761DEA0, der nur 28 Bytes lang ist.
Das hier funktioniert. Bringt mir aber leider nichts:
std::wofstream file(L"c:\\test");
das funktioniert auch:
wchar_t *test=L"c:\\test"; std::wofstream file(test);
Ich bin bis jetzt immer davon ausgegangen das c_str() mir den String als widechar zurück gibt. Aber dann sollte das doch kein unterschied machen, oder?
-
Was hat FileName für einen Typ? Der Fehler da oben erscheint mir merkwürdig; sicher, dass du uns da nicht einen Cast verschweigst!?
-
Ich denke mal Filename ist ein std::string, damit das Funktioniert sollte es aber ein std::wstring sein.
std::wstring FileName=L"c:\\test"; std::wofstream file(FileName.c_str());
so sollte es funktionieren.
Der Compiler hätte eigentlich maulen sollen.
-
Der String ist Unicode.
String FileName;
-
Ich hab jetzt eine Lösung die funktioniert, auch wenn ich der Meinung bin das es so nicht gedacht ist.
std::string utf8Encode (String str) { return UTF8String (str).c_str (); } bool __fastcall TBinaryDatei::SaveToFile(String FileName) { LoadedFileName=FileName; std::ofstream file(utf8Encode(FileName.c_str()).c_str()); boost::archive::text_oarchive oa(file); [...] }
Alles andere was ich getestet hab hat immer zu Fehlern geführt.