我尝试读取FILE*
fp指向的文件,我想知道文件末尾的位置。因此我使用fseek();
在文件的末尾,我想从我的structure data
写入数据。
void printData(FILE *fp)
{
struct data tmp;
fseek(fp,0,SEEK_END);
while(fread(&tmp,sizeof(struct data),1,fp) > 0)
{
puts("test2");
printf("Vorname: %s\n",tmp.vorname);
printf("Nachname: %s\n",tmp.name);
printf("Adresse: %s\n",tmp.adresse);
}
}
这就是我的结构定义:
struct data
{
char name[30];
char vorname[20];
char adresse[50];
};
我的问题是,while循环甚至不执行一次。我忘记了什么吗?
答案 0 :(得分:3)
fseek(fp,0,SEEK_END)
将文件指针放在文件的末尾(文件偏移0的起始点结束),然后当你尝试从文件读取时,fread当然不会读取任何内容。
而是以追加模式打开文件并写入记录数,这些将附加到文件中。
答案 1 :(得分:0)
您正在寻找文件的开头,因为您将偏移设置为0.这听起来不像您想要做的那样,但另一方面寻求结束然后尝试阅读也会失败。我糊涂了。 :/
难道你的意思是fwrite()
,而不是`fread()?不太可能,因为其余代码在 I / O之后打印结果,这对于阅读是合乎逻辑的而不是用于写入。
有关更多信息会很有帮助,例如您的文件已打开以及运行程序时它包含的内容。
答案 2 :(得分:0)
fread中的第三个变量“1”实际上表示要读取的项目数,而您只是读取一个项目。请参阅fread文件: http://pubs.opengroup.org/onlinepubs/009696899/functions/fread.html
答案 3 :(得分:0)
在寻找文件结尾后,您将无法阅读任何内容。如果你只是想知道文件大小,你可以使用fstat()
代替,或者在阅读了你想要阅读的内容后执行fseek()
,这取决于你想要实现的目标。
答案 4 :(得分:0)