Aus 10 Byte Datei wird nur 4 Byte gelesen O.o
-
Hi!
Ich habe eine Funktion geschrieben, die eine Datei öffnet und dann Byte für Byte die einzelnen Werte als boolean, integer, floating point und double ausgibt.
Nun habe ich eine 10 Byte Datei, Inhalt(1x Int, 1x Float usw.) jedoch zeigt mein Program davon nur 4 Bytes(4 Spalten) an. Woran liegt das?void filelist(char *filename){ fstream _src; _src.open(filename, ios::in | ios::binary); if(!_src) cout << "ERROR"; long int c = 0; int q = 0; int dummyi; float dummyf; bool dummyb; double dummyd; while(!_src.eof()){ _src.seekg(c);_src.read((char *) &dummyi, sizeof(int)); _src.seekg(c);_src.read((char *) &dummyf, sizeof(float)); _src.seekg(c);_src.read((char *) &dummyb, sizeof(bool)); _src.seekg(c);_src.read((char *) &dummyd, sizeof(double)); cout.fill(' '); cout.setf(ios::left); cout.precision(8);cout.width(15); if(dummyb) cout << setw(5) << (int) c << "\t\t" << setw(12) << (int) dummyi << "\t\t" << setw(15) << (float) dummyf << "\t\t" << setw(5) << "TRUE" << "\t\t" << setw(15) << (double) dummyd << "\n"; else cout << setw(5) << (int) c << "\t\t" << setw(12) << (int) dummyi << "\t\t" << setw(15) << (float) dummyf << "\t\t" << setw(5) << "FALSE" << "\t\t" << setw(15) << (double) dummyd << "\n"; c++;q++; if(q==50) {cout << "PRESS ENTER TO CONTINUE\n"; while(cin.get()!='\n') ; q = 0;cout << endl << endl << endl; cout << setw(5) <<"ID"<< "\t\t" << setw(12) <<"INT"<< "\t\t" << setw(15) <<"FLOAT"<< "\t\t" << setw(5) <<"BOOL"<< "\t\t" << setw(15) <<"DOUBLE"<< "\n"; }Inhalt der zu lesenen Datei(achtung Binär!!) *START* ��H@ A*ENDE*
BlackMaster_
-
Das liegt daran dass ein double 8 Byte hat.
-
Ich bin BlackMaster_
Emm aber ich fahre die Datei doch immer per _src.seekg(c) zum Startbyte zurück.
Also sollte das doch für
c=1,2,3,4,5,6,7 und 8 durchlaufen, oder?Wenn nein, Wie mach ich dass, dass der bis 8 durchläuft?
-
Bei c=3 knallt der Lesezeiger gegens Dateiende und setzt "eof = true". Sozusagen.
Dadurch terminiert die Schleife beim nächsten Durchlauf.
-
Thx erstmal!
Kann ich da nicht irgendwie überprüfen
if(c+8>EndeDerDatei) // Imaginär
???
EDIT:
Oder halt das EOF auf False setzen.. _src.reset(); geht irgendwie nicht...
-
Verwende statt 'reset' mal 'clear'.
-
Thx