首页 > 解决方案 > C中包含哪些空二进制文件

问题描述

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    FILE *fp;

    fp = fopen("clients.dat", "wb");
    fclose(fp);

    fp = fopen("clients.dat", "rb");

    while (1) {
        if (fp == EOF)
            break;
        else 
            printf("There is something inside a file");
    }

    fclose(fp);
    return 0;
}

这里有一个问题:空的二进制文件包含什么?指针应该指向EOF字符吗?我的意思是:文件中的第一件事和最后一件事不是EOF吗?或者如何检查文件是否为空?

标签: cfile

解决方案


空文件不包含任何内容,它是空的。所以它包含0个字节。EOF不是文件末尾的字符,它是一个整数常量,用作从文件读取的某些标准方法的返回值,以指示文件结束或某种错误。

当你打开一个文件时,你会得到一个指向FILE类型的指针,即使是一个空文件,这也是你所期望的。

文件的终止方式与字符串的终止方式不同,因此文件中没有等效的NULL字符来确定文件内容何时停止。

要确定您已打开并具有有效FILE指针的文件是否为空,您可以使用fseekand ftell

fseek(fp, 0, SEEK_END);
size = ftell(fp);
if (size == 0) {
    // File is empty
}

推荐阅读