fread und feof
-
Hallo,
ich habe ein Dataiformat welches ich mit Chunks aufgebaut habe um zu testen ob alles funktioniert habe ich einfach mal nur die Chunks ohne Daten in die Datei geschrieben ( per fwrite ). Nun habe ich das Problem das der letzte Chunk immer doppelt gelesen wird.
So hab ich in die Datei geschrieben:
FILE* p_file = f_open("Config.file","w"); chunkHeader.Type = 1; fwrite(&chunkHeader,sizeof(ChunkHeader_st),1,p_file); chunkHeader.Type = 2; fwrite(&chunkHeader,sizeof(ChunkHeader_st),1,p_file); chunkHeader.Type = 3; fwrite(&chunkHeader,sizeof(ChunkHeader_st),1,p_file); chunkHeader.Type = 4; fwrite(&chunkHeader,sizeof(ChunkHeader_st),1,p_file); fclose(p_file);
Ich denke mal das er hier die daten richtig reinschreibt. Nun lese ich sie wie folgt aus:
FILE* p_file = fopen("Config.file","r"); ChunkHeader_st chunkHeader; while (!feof(p_file)) { fread(&chunkHeader,sizeof(ChunkHeader_st),1,p_file); switch(chunkHeader.Type) { case 1: // ... Ausgabe per Message Box break; case 2: // ... Ausgabe per Message Box break; case 3: // ... Ausgabe per Message Box break; case 4: // ... Ausgabe per Message Box break; default: // ... Ausgabe das ungültiger Chunktyp break; } }
In diesem fall wird das CASE 4 immer zweimal ausgeführt weiß jemand wieso ?
-
typisches .eof()-problem, gib deinem programm eine break-anweisung VOR der ausgabe, z.B.
if(datei.eof()){break;};
-
FILE* hat kein eof()
-
MannyDasMammut schrieb:
while (!feof(p_file))
-
So jetzt hab ich einfach das eingetragen:
if(feof(p_file)) { break; }
macht er aber nicht
-
Wo hast du das eingetragen?
-
Direkt nach der fread Anweißung in der while schleife
-
case 1: if(feof(p_file)){break;}; // ... Ausgabe per Message Box break;