[当我使用“ 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);
问题在于,当使用fseek
属性打开文件时,"a"
是不应该工作] >>。参见here:
append:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,然后进行扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。文件已创建如果不存在。
要解决此问题,请尝试使用
"a+"
属性:
追加/更新:使用以下命令打开文件进行更新(用于输入和输出)所有输出操作都将数据写入文件的末尾。重新定位操作(fseek,fsetpos,倒带)会影响下一个输入操作,但输出操作将位置移回文件末尾。如果文件不存在,则会创建该文件。
模式参数指向一个字符串。如果字符串是以下内容之一(如下所述),则应以指示的模式打开文件。否则,行为是不确定的。