2015-04-20 14 views
5

Ich habe eine Reihe von Listenelementen, die ich in die Struktur gelesen habe. Dieser Code sollte das vorhandene Element ersetzen. Ein Benutzer gibt die Position ein (1..n) und der entsprechende Datensatz sollte ersetzt werden. Aber es funktioniert nicht, der Datensatz setzt das Ende der Datei. Was ist los mit dir?fwrite schreibt an das Ende der Datei nach dem Suchen bis zum Ende

int pos; 
FILE* file = fopen("file.txt", "ab+"); 
scanf("%d", &pos); 
Schedule sch = getScheduleRecord(); 
fseek(file, sizeof(Schedule) * (pos - 1), SEEK_SET); 
fwrite(&sch, sizeof(sch), 1, file); 
fclose(file); 
break; 
+0

Ja, das funktioniert fopen. danke – Ivan

+0

@ user3121023 Könnten Sie dies als Antwort posten, damit es upvoted und die Frage als beantwortet markiert werden kann? – MicroVirus

Antwort

2

Try "rb +"
"ab +" öffnet die Datei im Anfügen für binäre mit Lese- und Schreib. Schreiben ist nur am Ende der Datei erlaubt. Die Datei wird erstellt.
"rb +" öffnet die Datei im Lesen für Binär mit Lesen und Schreiben. Das Lesen oder Schreiben kann an einer beliebigen Stelle in der Datei stattfinden, indem eine fseek() beim Wechsel zwischen Lesen und Schreiben verwendet wird. Die Datei muss existieren oder fopen wird fehlschlagen.
"wb +" öffnet die Datei in write für binary mit Lesen und Schreiben. Die Datei wird erstellt, aber wenn die Datei existiert, wird der Inhalt gelöscht.
Allerdings können Sie Anrufe Nest

FILE* file; 
if ((file = fopen("file.txt", "rb+")) == NULL) {//open for read 
    //if file does not exist, rb+ will fail 
    if ((file = fopen("file.txt", "wb+")) == NULL) {//try to open and create 
     //if file can not be created, exit 
     printf ("Could not open file\n"); 
     exit (1);//failure 
    } 
}