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.


Anmelden zum Antworten