2015-04-20 22 views
5

Yapıya okuduğum bir dizi liste öğesi var. Bu kod mevcut öğeyi değiştirmelidir. Bir kullanıcı pozisyonu (1..n) girer ve karşılık gelen kayıt değiştirilmelidir. Ama işe yaramıyor, kayıt dosya sonuna kadar koyar. Sorun nedir?fwrite, sonuna kadar yazdıktan sonra dosyanın sonuna yazıyor

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

Evet, bu işler fopen çağırır. teşekkürler – Ivan

+0

@ user3121023 Bunu bir cevap olarak gönderebilir misiniz? Böylece bu soruya cevap yazılabilir ve soru cevaplandı olarak işaretlenebilir mi? – MicroVirus

cevap

2

deneyin "rb +"
"ab +" okuma ve yazma ile ikili için append dosyasını açar. Yazılıma sadece dosyanın sonunda izin verilir. Dosya oluşturulacak.
"rb +", okuma ve yazma ile ikili okuma için dosyayı açar. Okuma ve yazma arasında geçiş yaparken, fseek() kullanarak dosyadaki herhangi bir yerde okuma veya yazma işlemi gerçekleştirilebilir. Dosya mevcut olmalı veya fopen başarısız olacaktır.
"wb +", okuma ve yazma ile dosyayı ikili olarak açar. Dosya oluşturulacak, ancak dosya mevcutsa, içerik silinecektir.
Ancak iç içe geçiremezsiniz

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 
    } 
} 
İlgili konular