Wie kann man das Ende einer Datei feststellen?



  • Hallo

    Ich muss aus einer Datei alle Werte lesen.
    Die datei ist binär!!

    Wie lautet nun aber das richtige Abbruchkriterium?

    Ich kann ja nicht auf EOF schauen, weil ich mitten im Binärfile lauter solcher Werte habe.

    // chr ist ein char
    // ar ist ein CByteArray
    // pMyFile ist ein FILE*
    do{
          chr = getc (pMyFile);
          bytecount++;
          ar.Add(chr);
      } while (chr != EOF);
    

    Sobald nun EOF (also das Zeichen 'ÿ' (0xFF) im File vorkommt, wird abgebrochen, dass darf aber nicht sein.
    Wer weiss Rat??

    Danke



  • versuchs mal mit:

    } while(!chr.eof());
    

    ...nur ein versuch...



  • Das bringt nichts. Noch nicht mal dann, wenn er Streams nutzen würde. Weil eof() nur abfragt, ob das EOF-Bit gesetzt ist oder nicht.

    Das sieht nach C aus, nicht nach C++.



  • PuppetMaster2k schrieb:

    Das bringt nichts. Noch nicht mal dann, wenn er Streams nutzen würde. Weil eof() nur abfragt, ob das EOF-Bit gesetzt ist oder nicht.

    Das sieht nach C aus, nicht nach C++.

    das eof bit wird aber bei \0 nur gesetzt, wenn man nicht im binary mode öffnet. im binary mode wird eof erst beim physikalischen dateiende gesetzt.

    und dass es c++ ist sieht man ganz einfach an folgender zeile:

    ar.Add(chr);
    


  • otze schrieb:

    und dass es c++ ist sieht man ganz einfach an folgender zeile:

    ar.Add(chr);
    

    Ups, hab die Zeile völlig übersehn 🙄



  • Hallo,
    getc liefert einen int und kein char. Du solltest das Ergebnis also auch an einen int zuweisen. Dann funktioniert auch der Test auf EOF.



  • HumeSikkins schrieb:

    Hallo,
    getc liefert einen int und kein char. Du solltest das Ergebnis also auch an einen int zuweisen. Dann funktioniert auch der Test auf EOF.

    OK danke.


Anmelden zum Antworten