我将txtfile导入到我的文件中,如何检查输入文件是否为空。
我已经检查过它是否无法读取输入。这就是我到目前为止所做的:
#include<stdio.h>
#include<stdlib.h>
int main (int argc, char *argv[]){
// argv[1] will contain the file name input.
FILE *file = fopen(argv[1], "r");
// need to make sure the file is not empty, error case.
if (file == NULL){
printf("error");
exit(0);
}
// if the file is empty, print an empty line.
int size = ftell(file); // see if file is empty (size 0)
if (size == 0){
printf("\n");
}
printf("%d",size);
尺寸检查显然不起作用,因为我输入了一些数字,尺寸仍为0.任何建议?
答案 0 :(得分:3)
您可以使用sys/stat.h
并调用st_size
结构成员的值:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
int main (int argc, char *argv[]) {
if (argc != 2) {
return EXIT_FAILURE;
}
const char *filename = argv[1];
struct stat st;
if (stat(filename, &st) != 0) {
return EXIT_FAILURE;
}
fprintf(stdout, "file size: %zd\n", st.st_size);
return EXIT_SUCCESS;
}
答案 1 :(得分:1)
如何尝试阅读第一行。 看看你得到了什么角色?
答案 2 :(得分:1)
调用ftell()
不会告诉您文件的大小。从手册页:
ftell()函数获取当前值 流的文件位置指示符 流指出。
也就是说,它会告诉您文件中的当前位置...对于新打开的文件,它始终为0
。您需要先seek
到文件末尾(请参阅fseek()
)。
答案 3 :(得分:1)
ftell
将告诉您文件指针所在的位置,并且在您打开文件后,此位置始终为0。
您可以在打开前使用stat
,也可以使用fseek
在文件中搜索一些距离(或在结尾处),然后使用ftell
。
或者你延迟支票直到事后。即,您尝试阅读您需要阅读的内容,然后验证您是否成功。
更新:说到支票,您无法保证
// argv[1] will contain the file name input.
为此,您需要检查argc
是否至少为2(第一个参数是可执行文件名)。否则,您的文件名可能是NULL
。 fopen
应该只返回NULL
,但在其他情况下,您可能会发现自己正在查看核心转储。