[英]fread doesn't work how it should
我尝试读取FILE*
fp指向的文件,并且我想知道文件结尾在哪里。 因此我使用fseek();
在文件末尾,我想从structure data
写入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循环甚至不会执行一次。 我忘了什么吗?
fseek(fp,0,SEEK_END)
将文件指针定位在文件末尾(偏移量0的起始点),然后尝试从文件中读取时,fread当然不会读取任何内容。
而是以追加模式打开文件并写入记录数,这些记录将追加到文件中。
您正在寻找文件的开头,因为您将偏移量设置为0。这听起来不像您想要做的事情,但是另一方面,寻找结尾然后尝试读取也会失败。 。 我糊涂了。 :/
可能是您的意思是fwrite()
而不是`fread()吗? 不太可能,因为其余代码将在 I / O 之后 打印结果,这对于读取而不是写入是逻辑的。
这将有助于您获得更多信息,例如打开文件以及运行程序时文件中包含的内容。
fread中的第三个变量“ 1”实际上指示要读取的项目数,而您仅读取一个项目。 有关此信息,请参阅fread文档: http : //pubs.opengroup.org/onlinepubs/009696899/functions/fread.html
搜索到文件结尾后,您将无法读取任何内容。 如果您只想知道文件大小,则可以改用fstat()
,或者在读取要读取的内容之后执行fseek()
,具体取决于您要实现的目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.