Dateien Block I/O Problem
-
Hallo!
Ich benutze eine Binärdatei quasi als Datenbank, jeder Datensatz ist ein Block fester Größe mit der Datensatznummer als Offset innerhalb dieser Datei.
Zum lesen mache ich folgendes:
if(fseek( file, position*g_Config.rawRecordSize, SEEK_SET))!=0) { //Fehler... } if((rc=fread( buffer, g_Config.rawRecordSize, 1, g_StorageFile))!=1) { if(feof(file)) { logError("End of file condition"); } if(ferror(g_StorageFile)) { logError("I/O error"); } }Schreiben funktioniert genauso (seek, und dann write). Nach Schreiboperationen mache ich immer noch ein fflush(), die Datei bleibt aber die ganze Zeit über geöffnet.
Problem: Nun passiert es regelmäßig dass beim fread() ein EndOfFile-Fehler auftritt, zum Beispiel wenn ich erst 2 records einfüge, und diese dann wieder auslese, dann wieder überschreibe und wieder auslese. Mit einem Hexeditor beguckt, ist die Datei aber groß genug und enthält sogar die gewünschten Daten. Was mache ich falsch?
-
Vielleicht solltest du feof(g_StorageFile) schreiben.
-
stimmt, aber das ist nur ein Übertragungsfehler zw. meinem Programm und diesem Posting

Es gibt wohl keine Edit-Funktion für unregistrierte?