C fwrite在查找文件结尾后写入文件结尾

C fwrite在查找文件结尾后写入文件结尾,c,fwrite,fseek,C,Fwrite,Fseek,我有一组我读到结构中的列表项。此代码应替换现有项。用户输入位置(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, sizeo

我有一组我读到结构中的列表项。此代码应替换现有项。用户输入位置(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;
试试“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
    }
}

是的,行得通。thanks@user3121023你能把这个作为一个答案贴出来,这样它就可以被升级,并且问题被标记为已回答吗?