fseek()是否将文件指针移动到文件的开头,如果它在< a + b”中打开了模式?
我希望使用“a + b”模式打开一个文件,即如果它不存在则会自动创建,但如果是,我不想覆盖它。我希望能够读取和写入该文件。
该文件是二进制文件,我想在其中保存特定
struct
的记录。所以我想对你想要的记录做fseek()
然后使用fwrite()
保存记录。
代码如下所示(MyRecord
是typedef
到struct
,而FILENAME
是文件名的#define
):
int saveRecord(MyRecord *pRecord, int pos)
{
FILE* file = fopen(FILENAME, "a+b");
if (file == NULL)
{
printf("Unable to open file %sn", FILENAME);
return 0;
}
fseek(file, pos * sizeof(MyRecord), SEEK_SET);
fwrite(pRecord, sizeof(MyRecord), 1, file);
fclose(file);
return 1;
}
但是这个代码只是将记录追加到文件的末尾,即使我将pos
设置为0.为什么在appe11ѭ不是fseek()
在附加模式下工作?
我知道我可以简单地用“r + b”打开它,如果失败打开它用“wb”,但我想知道为什么这不起作用以及为什么fseek()
和SEEK_SET
将文件指针留在最后。对记录此行为的地方的任何引用都赞赏(因为我找不到任何,或者我使用了错误的关键字)。
没有找到相关结果
已邀请:
3 个回复
锹缄
模式下,写入
总是追加到最后。
仅在此模式下设置读指针。这在C标准7.19.5.3 fopen中有记载: 打开带附加模式的文件(
作为mode参数中的第一个字符) 导致对文件的所有后续写入被强制转换为当前的文件结束, 无论是否对“ѭ16”功能进行干预。
亲奋漏
然后
。 编辑:你可以尝试另一件事,用普通的C:
杰黔轿缺
的文档描述了文件在不同模式下的行为方式。