【发布时间】:2011-07-28 18:58:20
【问题描述】:
我希望使用“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 %s\n", FILENAME);
return 0;
}
fseek(file, pos * sizeof(MyRecord), SEEK_SET);
fwrite(pRecord, sizeof(MyRecord), 1, file);
fclose(file);
return 1;
}
但是,即使我将 pos 设置为 0,此代码也只是将记录附加到文件末尾。为什么 fseek() 和 SEEK_SET 不能在附加模式下工作?
我知道我可以简单地用“r+b”打开它,如果它失败了用“wb”打开它,但我想知道为什么这不起作用以及为什么 fseek() 和 SEEK_SET 会离开文件指针在末尾。对记录此行为的地方的任何引用表示赞赏(因为我找不到任何地方,或者我使用了错误的关键字)。
【问题讨论】: