Problem beim random-Zugriff innerhalb einer binär Datei
-
Hallöchen,
ich versuche nun mal wieder mit Dateien umzugehen. Diesmal habe ich in eine binär Datei 10 werte geschrieben.
Diese Werte kann ich auch wieder lesen, von daher wird die Ablage funktionieren.Nun kann der Benutzer einen gewünschten Index angeben, um einen bestimmten Wert innerhalb der binär Datei auszulesen.
Also,
1. gewünschten Index ermitteln:long index; scanf("%ld",&index);
2. versuchen die Stelle innerhalb der Datei auszulesen:
int readRandom(long index) { FILE *fp; int value; fp = fopen("bindata.bin","rb"); if(fp == NULL) { printf("Fehler beim oeffnen der Datei!\n"); } else { fseek(fp,index,0); // 0 = start + offset int readCount = fread(&value, sizeof(int), 1, fp); printf("Es wurden %d Zeichen eingelesen\n",readCount); printf("Am Index %ld steht der Wert %d\n",index, value); } fclose(fp); return 0; }
Für mich sieht der Code "ok" aus.
Nur leider wird mir für "value" immer ein Wert ausgegeben, der nichts mit dem integer zu tun hat, den ich in die Datei geschrieben habe.
Seht ihr einen Fehler?MfG
wax
-
so wie du das machst würde das mit einzelnen zeichen, die ein byte lang sind, funktionieren.
ein integer hat aber eine länge von mehr als einem byte. gibts du also z.b. als index eine 3 ein, landest du irgendwo mitten in einer integer-zahl. kein wunder also, das deine werte nicht stimmen.du müsstest fseek( fp, index*sizeof(int), 0 ) aufrufen.
-
Oh mein Gott bin ich fertig.
Danke, da hätte ich auch selbst drauf kommen können.MfG
wax
-
wax schrieb:
Oh mein Gott bin ich fertig.
Danke, da hätte ich auch selbst drauf kommen können.
MfG
waxwie kommst du eigentlich auf random zugriff *grübel*
-
Ach der Code war glaube ich mal für was anderes gedacht. Hatte keine Lust den Namen zu ändern. Ist eh nur was für Testcode.