恐惧不起作用

时间:2013-06-28 08:29:11

标签: c struct fread fseek

我尝试读取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循环甚至不执行一次。我忘记了什么吗?

5 个答案:

答案 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)

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

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

像:

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

了解更多: fread()fwrite()