繁体   English   中英

fread不能正常工作

[英]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() ,具体取决于您要实现的目标。

fread()用于从文件读取内容而不是写入。

使用fwrite()将内容写入文件。

喜欢:

fwrite(&tmp , 1 , sizeof(struct data) , fp );

阅读有关以下内容的更多信息: fread()fwrite()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM