fstream: Schreiben in Datei schlägt fehl



  • Hi
    Wenn ich versuch eine strcut in eine Datei zu schreiben, schlägt die Methode immer fehl. Hier mal mein Code:

    struct FHEADER
    {
    	byte namelen;
    	byte authorlen; 
    	unsigned short NumGroundTiles;
    	unsigned short NumObjects;
    };
    
    std::wfstream f(L"test.txt", std::ios::out | std::ios::binary);
    std::wstring name(L"Testname");
    std::wstring author(L"Testauthor");
    MHEADER mh = {static_cast<byte>(name.size()), static_cast<byte>(author.size()), 1, 2};
    
    if(!f)
    	return -1;
    
    f.write(reinterpret_cast<const wchar_t *>(&mh), sizeof(MHEADER));
    
    if(!f.good())
    	std::wcout << L"Error\n";
    
    f.close();
    

    Woran liegt das? Es muss doch mit structs genau so wie mit ints usw. gehen.

    MfG 001



  • Wieso heißt es oben FHEADER und unten MHEADER?



  • ups.. das ist nur ein Tippfehler aber es geht auch mit dem korrekten namen nicht.



  • 001 schrieb:

    f.write(reinterpret_cast<const wchar_t *>(&mh), sizeof(MHEADER));
    

    write(...) erwartet ein char* und nicht ein wchar_t*. Kann sein das das Problem da liegt.

    [cpp]f.write(reinterpret_cast<char*>(&mh), sizeof(MHEADER));
    

    [/cpp]



  • ich benutze std::wfstream. Genauer gesagt std::basics_festream<wchar_t, std::char_traits<wchar_t>> und deshalb will die write() methode auch ein wchar_t



  • lol ich hab mal einfach anstatt wfstream fstream genommen und es scheint zu funktionieren. Aber warum geht das mit wfstream nicht?



  • 001 schrieb:

    ich benutze std::wfstream. Genauer gesagt std::basics_festream<wchar_t, std::char_traits<wchar_t>> und deshalb will die write() methode auch ein wchar_t

    Achja, sry übersehen ...



  • 001 schrieb:

    lol ich hab mal einfach anstatt wfstream fstream genommen und es scheint zu funktionieren. Aber warum geht das mit wfstream nicht?

    Möglicherweise weil wfstream::write() die Größenangabe nicht in Bytes, sondern in wchar_t's erwartet. (nur eine Idee)


Anmelden zum Antworten