2015-04-20 18 views
5

Tôi có một tập hợp các mục danh sách mà tôi đã đọc cho cấu trúc. Mã này sẽ thay thế mục hiện có. Người dùng nhập vị trí (1.n) và bản ghi tương ứng sẽ được thay thế. Nhưng nó không hoạt động, bản ghi được đặt vào cuối tập tin. Chuyện gì vậy?fwrite ghi vào cuối tập tin sau khi tìm đến cuối

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

Có, hoạt động. cảm ơn – Ivan

+0

@ user3121023 Bạn có thể đăng câu trả lời này để câu trả lời có thể được bỏ phiếu và câu hỏi được đánh dấu là đã trả lời không? – MicroVirus

Trả lời

2

Hãy thử "rb +"
"ab +" mở tập tin trong append cho nhị phân với đọc và viết. Chỉ được phép viết ở cuối tệp. Tệp sẽ được tạo.
"rb +" mở tệp trong phần đọc cho nhị phân có đọc và ghi. Đọc hoặc ghi có thể diễn ra tại bất kỳ vị trí nào trong tệp bằng cách sử dụng fseek() khi thay đổi giữa đọc và viết. Tệp phải tồn tại hoặc fopen sẽ không thành công.
"wb +" mở tệp trong ghi cho nhị phân có đọc và ghi. Tệp sẽ được tạo nhưng nếu tệp tồn tại, nội dung sẽ bị xóa.
Tuy nhiên, bạn có thể lồng các cuộc gọi đến 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 
    } 
} 
Các vấn đề liên quan