使用文件定位功能计数整数值的数量

时间:2014-04-04 13:26:31

标签: c binaryfiles

我必须写下面的函数:

返回整数二进制文件中整数数的函数。使用文件定位功能,不读取任何整数。

为此,我尝试如下所示,但我发现当我使用fseek()时,它将覆盖文件结束字符,因此我的循环变为无限循环。

请问您可以建议使用文件定位功能计算二进制文件中整数值的方法。

    #include<stdio.h>

void main()
{
    FILE *stream;
    int i=0, counter=0;

    stream = fopen("lab10binfile.dat","r");
    while(!feof(stream))
    {
        printf("Inside file");
        fseek(stream,sizeof(int)+i,SEEK_SET);
        counter++;
        i++;

    }
    printf("%d \n",counter);
}

该文件包含以下数据:

262 259 266 603 82 46 813 92 44 481 110 542 690 798 277 516 942 92 353 386 693 584 139 881 567 655 196 288 887 891 425 871 635 516 222 205 590 329 193 956 276 248 729 355 974 754 791

1 个答案:

答案 0 :(得分:3)

因为你有一个二进制文件,所以你可以简单地将该文件的长度除以int的大小,以找出它包含的int个:{/ p>

long
count(FILE *fp, size_t size)
{
    long end;

    if (fseek(fp, 0, SEEK_END) < 0) {
        perror("fseek");
        return -1;
    }

    if ((end = ftell(fp)) < 0) {
        perror("ftell");
        return -1;
    }

    if (end % size != 0) {
        return -1;
    }

    return end / size;
}

注意:在POSIX系统上,stat(2)也可用于查找文件的长度。