如何检查C中的文件是否为空?

时间:2015-02-12 23:13:57

标签: c file input

我将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.任何建议?

4 个答案:

答案 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(第一个参数是可执行文件名)。否则,您的文件名可能是NULLfopen应该只返回NULL,但在其他情况下,您可能会发现自己正在查看核心转储。