c - 我怎么知道文本文件是否为空?(在C中)

标签 c file-io

我试图在 C 中检测文本文件是否为空。 (值初始化为 NULL) 每当首先读取值(使用 fscanf)时,它总是返回文件为零, 即使它的值为“0”或“空”。

如何知道目标文本文件是否为空? (即使首字母为“0”也要区分)

最佳答案

如果根据 fopen(filename, "r") 成功打开文件进行读取,您可以通过这种方式在任何读取操作之前验证文件是否为空:

int is_empty_file(FILE *fp) {
    int c = getc(fp);
    if (c == EOF)
        return 1;
    ungetc(c, fp);
    return 0;
}

ungetc() 保证至少对一个字符有效。如果文件为空或由于 I/O 错误而无法读取,上述函数将返回 1。您可以通过测试 ferr(fp)feof(fp) 来判断。

如果文件是与设备或终端关联的流,则测试代码将阻塞,直到至少可以读取一个字节,或者发出文件结束信号。

如果文件是常规文件,您还可以使用系统特定的 API 来确定文件大小,例如 statlstatfstat(在 Posix 系统上)。

关于c - 我怎么知道文本文件是否为空?(在C中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40763984/

相关文章:

c - 单个内存地址可以存储多少条机器指令?

java - 通过 BufferedReader 读取文件时 while 循环不退出

java - 使用 java nio 将字符串写入文件的最佳方法

c++ - 为什么 ifstream 阅读器只读取图像文件的前 10 个字节?

java - 无法*正确*写入java文件

c - const char * 的 scanf 段错误

c - 如何从字符串中提取实数?

c - sscanf - 读取十六进制值不适用于逗号

Java TransferFrom不会传输超过16mb?

c - C 中的字符串 - print 是相同的 strcmp 说它们不是