我有一组列表项目,我读到了结构。此代码应替换现有项目。用户输入位置(1..n)并应替换相应的记录。但是它没有用,记录到文件末尾。怎么了?
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 :(得分:2)
尝试“rb +”
“ab +”打开文件追加二进制文件,读写。只能在文件末尾写入。该文件将被创建
“rb +”在读取和写入二进制文件时打开文件。在读取和写入之间切换时,可以使用fseek()
在文件中的任何位置进行读取或写入。文件必须存在或fopen将失败
“wb +”打开文件写入二进制文件,读写。将创建该文件,但如果文件存在,则将删除内容
但是,您可以将调用嵌套到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
}
}