wofstream und ofstream mit strukturen?



  • hallo,

    ich wollte mich mal daran wagen dateien mit ifstream/ofstream zu behandeln. da ich sonst möglichst nur noch unicode schreiben wollte, versuchte ich das mit den w...fstream funktionen. aber es klappt einfach nicht. ich habe das ganze jetzt mit den ohne w... probiert und da funktioniert es problemlos.

    ich würde es gerne aber mit den w... funktionen haben, wenns geht.

    Das ist die Struktur die ich verwenden möchte:

    struct LANGFILEHEADER_STRUCT {
    
        wchar_t    szAuthor[35];
        wchar_t    szLanguage[30];
        int        iAppVersion;
    
        };
    

    Und so dachte ich mir, könte ich die Daten in die Datei schreiben:

    wofstream pFileStream(sTargetFilepath.c_str(), ios::out | ios::binary); 
    
    // Fehlerabfrage für das Posting rausgeschnitten ...
    
    struct LANGFILEHEADER_STRUCT pFileHeader;
    
    swprintf_s(pFileHeader.szAuthor, sizeof(pFileHeader.szAuthor)/sizeof(wchar_t), TEXT("%s"), m_sFileInfo_Author.c_str());
    swprintf_s(pFileHeader.szLanguage, sizeof(pFileHeader.szLanguage)/sizeof(wchar_t), TEXT("%s"), m_sFileInfo_Language.c_str());
    pFileHeader.iAppVersion = _wtoi(sVersionString.GetBuffer());
    
    // Nach dem befüllen vom Struct sind alle Werte drin, sie sind vorhanden 
    // ... das hab ich geprüft.
    
    pFileStream.write(reinterpret_cast<wchar_t*>(&pFileHeader), sizeof(pFileHeader)); 
    
    pFileStream.close();
    

    sizeof() liefert eine Größe von 136 zurück und ist immer 136.

    Das Ergebnis ist das nur der Name des Autor gespeichert wird plus einem weiteren Byte. Wenn ich das alles mit ofstream anstatt wofstream mache, funktioniert alles und die Datei ist 136 Bytes Groß.

    Wie kann ich das beheben?



  • ich glaub ich habs hinbekommen, wie hätt ich auch wissen sollen das wofstream alles in multibyte in die datei haut ...

    http://www.codeproject.com/KB/stl/upgradingstlappstounicode.aspx

    Beim kommentar 'IMBUE_NULL_CODECVT the VC8 way' steht dann wie das mit Warning behoben werden kann.

    Soweit scheint jetzt alles bei mir zu funktionieren.


Anmelden zum Antworten