我试图在 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 来确定文件大小,例如 stat
、lstat
、fstat
(在 Posix 系统上)。
关于c - 我怎么知道文本文件是否为空?(在C中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40763984/