ifstream -> Datei wird nicht vollständig eingelesen



  • Hallo zusammen,

    ich habe ein kleines Problem das ich nicht ganz nachvollziehen kann. Ich möchte gerne eine Datei komplett in den Speicher lesen um dann die Daten weiter zu verarbeiten. Allerdings wird die Datei nicht vollständig eingelesen, sondern nur die ersten drei Byte. Das merkwürdige ist, dass ich diese Methode benutze um einen anderen Dateityp einzulesen (Code ist identisch) was ohne Probleme funktioniert.

    std::ifstream inputFileStream;
    inputFileStream.open(path, std::ios_base::in | std::ios_base::binary);
    
    if(inputFileStream.good())
    {
    	long fileSize;
    	char* inputPuffer;
    
    	inputFileStream.seekg(0, std::ios::end);
    fileSize = inputFileStream.tellg();
    		inputPuffer = new char[fileSize];
    		inputFileStream.seekg(0, std::ios::beg);
    		inputFileStream.read(inputPuffer, fileSize);
    		inputFileStream.close();
    		std::string s(inputPuffer);
    		std::stringstream inputRunner(s);
    

    fileSize enthält im vorliegenden Fall den Wert 196662. Im String stehen aber nur drei Byte. Diesen Fehler kann ich leider nicht nachvollziehen, da diese Art des Einlesens an anderer Stelle funktioniert.



  • ist sicher eine Unicode Datei und da schleicht sich dann eine null ein.

    greetz KN4CK3R



  • Ist eine BMP-Datei. Zählt das zu Unicode?? Ich glaube das ist eine reine Binärdatei.



  • Eben drum kann da auch irgendwo eine (mehrere) 0 drin sein ...
    und dann ist für:

    std::string s(inputPuffer);
    

    bei dieser 0 der C-String (inputPuffer) eben zu Ende.



  • Nullen sind da aufjedenfall viele. Wie kann ich dieses Problem umgehen?



  • Eventuell kriegst Du alles in den string mit:

    std::string s(inputPuffer, fileSize);
    //Test:
    cout << s.size();
    

    Wahrscheinlich ist aber in diesem Fall, dass vector<char> der passendere Datentyp für Deine Datei ist.



  • Funktioniert!! Ich danke dir!



  • die Frage ist eher warum du ein BILD in einen STRING speichern willst.

    greetz KN4CK3R



  • Das habe ich mich auch gefragt. 😕
    Und statt dem "new char[]" solltest du besser std::array<>oder std::vector<> benutzen.

    Aber wofür benötigst du denn überhaupt den std::stringstream? Du hast doch den std::ifstream.
    Also welchen genauen Grund gibt es hierfür:

    aptem schrieb:

    Ich möchte gerne eine Datei komplett in den Speicher lesen um dann die Daten weiter zu verarbeiten.


Anmelden zum Antworten