Komische Zeichen am Ende einer Textdatei



  • Hi,

    wenn ich eine Textdatei folgendermaßen einlese und ausgebe, werden
    komischerweise immer noch ein paar weitere Buchstaben hintendrangehängt.
    Dies deutet daraufhin, dass ich über das Dateiende hinauslese.
    Aber dem ist meiner Meinung nach nicht.

    std::ifstream File;
    File.open( FileName.c_str(), std::ios::in );
    
    if( File.fail() )
    {
      std::cout << "Couldn't open File <" << FileName << ">" << std::endl;
    }
    
    File.seekg( 0, std::ios::end );
    unsigned int Size = File.tellg();
    File.seekg( 0, std::ios::beg );
    Size -= File.tellg();
    
    char* Buffer = new char[ Size ];
    
    File.read( Buffer, Size );
    
    std::string FileData;
    FileData.assign( Buffer, Size );
    
    delete[] Buffer;
    
    std::cout << FileData;
    


  • Debugger -> Size == Dateigröße? Macht string.assign null terminierung?

    Size -= File.tellg();
    

    kannst du dir glaub ich sparen.



  • Size ist nicht gleich der Dateigröße, aber ich habe keine Ahnung warum.



  • char* Buffer = new char[ Size + 1]; 
    File.read(Buffer,Size);
    Buffer[Size] = 0;
    


  • Fellhuhn schrieb:

    char* Buffer = new char[ Size + 1]; 
    File.read(Buffer,Size);
    Buffer[Size] = 0;
    

    Nicht nötig.



  • Murmel schrieb:

    Size ist nicht gleich der Dateigröße, aber ich habe keine Ahnung warum.

    Weil Size sehr wahrscheinlich die Größe der externen Repräsentation enthält, während die interne Repräsentation kürzer sein kann. Z.B. \n\r wird vom Code Conversion Facet im Streambuffer zu \n gewandelt, wenn das Binaryflag nicht gesetzt ist.


Anmelden zum Antworten