2015-04-20 36 views
5

Mam zestaw elementów listy, które czytam do struktury. Ten kod powinien zastąpić istniejący element. Użytkownik wprowadza pozycję (1..n), a odpowiedni rekord powinien zostać zastąpiony. Ale to nie działa, rekord kładzie się na koniec pliku. Co jest nie tak?fwrite zapisuje na końcu pliku po dotarciu do końca

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

Tak, to działa. dzięki – Ivan

+0

@ user3121023 Czy możesz opublikować to jako odpowiedź, aby można było przegłosować i pytanie oznaczone jako odpowiedź? – MicroVirus

Odpowiedz

2

Try "rb +"
"ab +" otwiera plik w append dla binarnych z odczytu i zapisu. Pisanie jest dozwolone tylko na końcu pliku. Plik zostanie utworzony.
"rb +" otwiera plik do odczytu dla pliku binarnego z odczytem i zapisem. Odczyt lub zapis może odbywać się w dowolnym miejscu pliku przy użyciu fseek() podczas zmiany między czytaniem a pisaniem. Plik musi istnieć lub fopen się nie powiedzie.
"wb +" otwiera plik w zapisie dla pliku binarnego z odczytem i zapisem. Plik zostanie utworzony, ale jeśli plik istnieje, zawartość zostanie usunięta.
jednak można zagnieździć wywołania fopen

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 
    } 
}