Korruptes Lesen aus der Datei



  • Hallo!

    Ich versuche mittels build-events die resource-files von Visual Studio zur Aktualsierung der Build-Nummern zu ändern.

    Hierfür lese ich die ressource-File ein, ändere die benötigten Zeilen und schreibe es in die Datei zurück. Allerdings werden beim Zurückschreiben seltsame Zeichen in die Datei eingefügt und ich kann mir nicht erklären woran das liegen könnte. Zu Demonstrationszwecken (für das Forum) schreibe ich die gelesenen Daten in die Datei zurück ohne etwas geändert zu haben, wobei die Effekte dieselben sind. Weiß irgendjemadn woran das liegen könnte und wie man es beheben kann?

    Hiermit lese ich die Datei ein (mFileContent ist ein vector aus strings):

    mFile.open(mParams.tFilename.c_str(), std::fstream::in);
    
            if (!mFile.is_open())
            {
                    cerr << "ReadFile:Cannot open file!\n";
                    return false;
            }
    
            string line = ""; 
            mFileContent.clear();
            while (getline(mFile, line))
            {
                    mFileContent.push_back(line);
            }
    

    und hiermit schreibe ich es zurück in die Datei zurück:

    mFile.open(mParams.tFilename.c_str(), std::fstream::out  std::fstream::trunc);
      std::ostream_iterator<std::string> output_iterator(mFile, "\n");
                std::copy(mFileContent.begin(), mFileContent.end(), output_iterator);
    

    Der originale Inhalt (Teilausschnitt):

    >     // Microsoft Visual C++ generated resource script.
    >     //
    >     #include "resource2.h"
    >      
    >     #define APSTUDIO_READONLY_SYMBOLS
    >     /////////////////////////////////////////////////////////////////////////////
    >     //
    >     // Generated from the TEXTINCLUDE 2 resource.
    >     //
    >     #include "winres.h"
    >      
    >     /////////////////////////////////////////////////////////////////////////////
    >     #undef APSTUDIO_READONLY_SYMBOLS
    >      
    >     /////////////////////////////////////////////////////////////////////////////
    >     // German (Austria) resources
    >      
    >     #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEA)
    >     LANGUAGE LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN
    >      
    >     #ifdef APSTUDIO_INVOKED
    >     /////////////////////////////////////////////////////////////////////////////
    >     //
    >     // TEXTINCLUDE
    >     //
    

    Der zurückgeschribene Inhalt:

    // Microsoft Visual C++ generated resource script.
        ਍⼀⼀ഀഀ
        #include "resource2.h"
        ਍ഀഀ
        #define APSTUDIO_READONLY_SYMBOLS
        ਍⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀ഀഀ
        //
        ਍⼀⼀ 䜀攀渀攀爀愀琀攀搀 昀爀漀洀 琀栀攀 吀䔀堀吀䤀一䌀䰀唀䐀䔀 ㈀ 爀攀猀漀甀爀挀攀⸀ഀഀ
        //
        ਍⌀椀渀挀氀甀搀攀 ∀眀椀渀爀攀猀⸀栀∀ഀഀ
    
        ਍⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀⼀ഀഀ
        #undef APSTUDIO_READONLY_SYMBOLS
        ਍ഀഀ
        /////////////////////////////////////////////////////////////////////////////
        ਍⼀⼀ 䜀攀爀洀愀渀 ⠀䄀甀猀琀爀椀愀⤀ 爀攀猀漀甀爀挀攀猀ഀഀ
    


  • Vlt war die Datei utf8/16 etc codiert und du schreibst die BOM wieder mit rein?



  • Das kann sein, aber muss die Codierung nicht beibehalten werden? Wie msus ich da jetzt genau vorgehen?



  • es war tatsächlich utf16 codiert. Habe versucht die BOM zu überpsringen, hat allerdings nicht funktioneirt. Deshalb habe ich die resource-Datei als ANSI-Code gespeichert und siehe da: es klappt einwandfrei 🙂


Anmelden zum Antworten