我有一组列表项目,我读到结构.此代码应替换现有项目.用户输入位置(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;
Run Code Online (Sandbox Code Playgroud)
尝试“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
}
}
Run Code Online (Sandbox Code Playgroud)