Binary Files
-
wie kann ich in einem binary file auf einen bestimmten eintrag zugreifen und diesen ändern?
meine lösung funktioniert leider nicht:
fopen mit 2.Parameter wb
cin >> position;
cin >> neue_zahl;
fseek(Datei1,position*sizeof(float),0);
fwrite(&neue_zahl,sizeof(float),1,Datei1);warum funktioniert das nicht???
über einen lösungsansatz wäre ich sehr dankbar!MfG Axor
-
Wie sieht Deine fopen Anweisung aus und was passiert wenn Du das machst?
-
Datei1 = fopen(openpath,"wb");
s=sizeof(float);
gotoxy(30,10);
printf("Position eingeben: ");
cin >> pos;
pos-=1;
gotoxy(30,12);
printf("Neue Zahl Nr. %d eingeben: ",pos+1);
cin >> zahl;
fseek(Datei1,pos*s,0);
fwrite(&zahl,s,1,Datei1);wenn ich das mache, dann ist auf der Position, die ich eingebe die neue zahl, und auf allen positionen danach auch, auf allen positionen vor der eingegebenen position steht 0
Beispiel:
file mit 5 zahlen
zahl 1 = 1
zahl 2 = 2
zahl 3 = 3
zahl 4 = 4
zahl 5 = 5dann rufe ich das ändern auf
als postion gebe ich 3 ein
als neuen wert 9Ergebnis:
zahl 1 = 0
zahl 2 = 0
zahl 3 = 9
zahl 4 = 9
zahl 5 = 9???
-
Ist auch klar,
Datei1 = fopen(openpath,"wb");
löscht die Datei.
MitDatei1 = fopen(openpath,"a+b");
, öffnet man eine Datei um was reinzuschreiben und den alten Inhalt zu erhalten.
Versuch es mal so.
-
naja alle zahlen bleiben nun gleich und auf position 6 steht dann die neue zahl 9
-
Hm,
versuch mal ein rewind nach dem öffen der Datei, damit setzt Du den Dateipointer auf den Anfang der Datei. :p
-
rewind? kannst du das bitte noch ein bisschen erläutern...
ich bin erst c anfänger...
-
achja einfach rewind(Datei1);
oder?hat nix gebracht... noch immer die neue zahl am ende...
-
Example
/* REWIND.C: This program first opens a file named
* REWIND.OUT for input and output and writes two
* integers to the file. Next, it uses rewind to
* reposition the file pointer to the beginning of
* the file and reads the data back in.
*/#include <stdio.h>
void main( void )
{
FILE *stream;
int data1, data2;data1 = 1;
data2 = -37;if( (stream = fopen( "rewind.out", "w+" )) != NULL )
{
fprintf( stream, "%d %d", data1, data2 );
printf( "The values written are: %d and %d\n", data1, data2 );
rewind( stream );
fscanf( stream, "%d %d", &data1, &data2 );
printf( "The values read are: %d and %d\n", data1, data2 );
fclose( stream );
}
}Output
The values written are: 1 and -37
The values read are: 1 and -37PS: ein Buch über C++ nit den Befehlen drin ist immer hilfreich
-
Dann gibt es noch die HARTE Methode.
1. lies die Datei aus und schreib sie in den Speicher
2. manipuliere die Werte
3. schreibe die Datei zurück
-
es muss doch noch eine normale methode geben...
sicher könnte ich alle zahlen bis zur eingegebenen position einlesen
diese dann in eine neues file eine neue zahl dranhängen und dann die restlichen alten zahlen, die ich gespeichert habe auch daranhängen...aber das wär ja ziemlich aufwändig... gibts da wirklich nichts anderes?
-
das a+ im fopen parameter heißt doch lese und schreibe AN DATEIENDE, oder?
kanns daran liegen?
-
Eine Idee/Versuch noch.
fopen(datei,"r+")
-
wow das wars!!!
wie kann das sein???r+ bedeutet ja lesen und schreiben
aber nicht für binary files...
aber es funktioniert beim ersten test...
hoffe auch bei den weiteren tests!
VIELEN DANK SCHON MAL
ich schreib dann noch ob das wirklich funktioniert!
-
ja, mit W+ leeres dokumen zum lesen und schreiben
mit a+ denspaß am dateiende
und dann blieb ja nurnoch r+