fopen(argv [1],“ ab”)之后fseek函数不起作用

问题描述 投票:1回答:2

[当我使用“ wb”选项打开文件时,fseek运行良好。但是fseek函数在fopen(argv [1],“ ab”)之后不能正常工作。

我的代码有问题吗?

这里是代码。

student.h
struct student {
  int id;
};

main.c
#define START_ID 1201001
struct student rec;
FILE *fp = fopen(argv[1], "rb");
if(fp==NULL) {
    fp=fopen(argv[1], "wb");
} else {
    fclose(fp);
    fp=fopen(argv[1], "ab");
}
fseek(fp, (rec.id-START_ID)*sizeof(sec), SEEK_SET);
c file fopen fseek
2个回答
3
投票

问题在于,当使用fseek属性打开文件时,"a"不应该工作] >>。参见here

append:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,然后进行扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。文件已创建如果不存在。

要解决此问题,请尝试使用"a+"属性:

追加/更新:使用以下命令打开文件进行更新(用于输入和输出)所有输出操作都将数据写入文件的末尾。重新定位操作(fseek,fsetpos,倒带)会影响下一个输入操作,但输出操作将位置移回文件末尾。如果文件不存在,则会创建该文件。


0
投票

模式参数指向一个字符串。如果字符串是以下内容之一(如下所述),则应以指示的模式打开文件。否则,行为是不确定的。

© www.soinside.com 2019 - 2024. All rights reserved.