Hilfe: get bei fstream setzt Dateigröße auf -1



  • Hallo!

    Der get-Befehl bei fstream um einzelne Zeichen auszulesen setzt die Dateigröße meiner Datei auf -1. Wie kann das sein?

    Viele Grüße
    pmw

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
       fstream FDatei;  
       unsigned char min;
       unsigned __int64 ILanege, zeichen[256];
    
       for (short i=0; i<=255; ++i)
       {
          zeichen[i] = 0;
       }
    
       FDatei.open("C:\\datei.hex", ios::in|ios::binary);
    
       FDatei.seekg(0, ios::end);
       ILanege = FDatei.tellg();
       cout << "#" << FDatei.tellg() << "#"; // #272# Stimmt!
       FDatei.seekg(0, ios::beg);
    
       for (unsigned __int64 i=0; i<=ILanege; ++i)
       {
          ++zeichen[FDatei.get()];
       }
    
       FDatei.seekg(0, ios::end);
       cout << "#" << FDatei.tellg() << "#"; // #-1# Warum?
       FDatei.seekg(0, ios::beg);
    
       for (short i=0; i<=255; ++i)
       {
          cout << "{" << zeichen[i] << "}"; // #272# Alle Zahlen stimmen!
       }    
    
       FDatei.seekg(0, ios::end);
       cout << "#" << FDatei.tellg() << "#"; // #-1# Warum?
       FDatei.seekg(0, ios::beg);
    
       FDatei.close();
    
       system("PAUSE");
       return 0;
    
    }
    


  • Hallo,
    schau dir diese Schleife an:

    for (unsigned __int64 i=0; i<=ILanege; ++i)

    Du liest hier ILaenge + 1 Zeichen. Du liest also die ILaenge-Zeichen aus der Datei + eof. Damit ist für deine Datei das eof-bit gesetzt. Solange du dieses bit nicht löschst, wird jede weitere Lese-Operation eof liefern.

    Ich denke ein FDatei.clear() nach der Schleife sollte dein Problem lösen.



  • was ist eigentlich __int64? ist das ein buildin type?



  • sieht nach einer compilererweiterung aus, eine ganzzahl mit 64 bit.
    manche mögen auch long long dafür verwenden, ist jedenfalls nicht standardisiert (noch)


Anmelden zum Antworten