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)