【发布时间】:2020-05-31 06:52:22
【问题描述】:
我做了一个函数来检查文本文件是否为空。我使用 fseek 和 ftell 进行检查,但问题是如果第一行是 '\n' 并且下一行是 EOF 那么 ftell 将返回 2 而不是 0 。我想检查文件是否真的为空,但我想不出是否有办法检查上述情况。请帮忙 。这是我的代码
void fileReader(FILE *file,char filePath[]){
char output[100];
file = fopen(filePath,"r");
printf("Content of file : ");
fseek(file, 0, SEEK_END);
printf("%d",ftell(file));
if(ftell(file)==0){
printf("\nthere is nothing here");
}
else{
do{
printf("%s", output);
}while (fscanf(file, "%s", output) != EOF);
}
fclose(file);
}
【问题讨论】:
-
在您描述的情况下,
ftell()应该返回 1,而不是 0。无论如何,问题是您如何定义“空”。带有\n的文件是空的吗?一百万个换行符呢?空格和换行符呢?如果您愿意接受内容为“空”的文件,则需要读取文件的内容并将其与您的空内容标准进行匹配。 -
您在代码中使用
"%d"转换说明符调用Undefined Behavior 以打印long int。类型和转换说明符之间的任何不匹配都会引发未定义的行为。它应该是"%ld"来伴随额外的 4 个字节。见C11 Standard - 7.21.6.1 The fprintf function(p9) -
是的,我认为文件只包含空格、制表符、换行符等是空的,但我不知道如何检查它
-
@bruno 是的,谢谢,我现在明白了
标签: c