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

如何在C中检查文件是否为空?,c,file,input,C,File,Input,我正在将TXT文件导入到我的文件中,如何检查输入文件是否为空 我已经检查了它是否无法读取输入。这就是我到目前为止所做的: #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

我正在将TXT文件导入到我的文件中,如何检查输入文件是否为空

我已经检查了它是否无法读取输入。这就是我到目前为止所做的:

#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);
#包括
#包括
int main(int argc,char*argv[]){
//argv[1]将包含文件名输入。
FILE*FILE=fopen(argv[1],“r”);
//需要确保文件不是空的,错误情况下。
if(file==NULL){
printf(“错误”);
出口(0);
}
//如果文件为空,则打印空行。
int size=ftell(文件);//查看文件是否为空(大小为0)
如果(大小==0){
printf(“\n”);
}
printf(“%d”,大小);

大小检查显然不起作用,因为我输入了一些数字,但大小仍然是0。有什么建议吗?

试试看第一行怎么样。
看看你能看到什么字符?

试试看第一行怎么样。 查看您得到的字符?

调用
ftell()
不会告诉您文件的大小。从手册页:

函数的作用是:获取当前值 流的文件位置指示器的名称 溪流指向的

也就是说,它会告诉您您在文件中的当前位置…对于新打开的文件,该位置将始终为
0
。您需要
首先搜索到文件的末尾(请参见
fseek()
)。

调用
ftell()
不会告诉您文件的大小。从手册页:

函数的作用是:获取当前值 流的文件位置指示器的名称 溪流指向的


也就是说,它会告诉您您在文件中的当前位置…对于新打开的文件,该位置将始终为
0
。您需要
seek
首先查找文件的末尾(请参见
fseek()
).

ftell
将告诉您文件指针所在的位置,打开文件后,该位置始终为0

您可以在打开文件之前使用
stat
,或者使用
fseek
在文件中(或在文件末尾)查找一些距离,然后使用
ftell

或者您将检查延迟到以后,即您尝试读取需要读取的内容,然后验证是否成功

更新:说到支票,您不能保证

// argv[1] will contain the file name input. 

为此,您需要检查
argc
是否至少为2(第一个参数是可执行文件名)。否则,您的文件名可能为
NULL
fopen
只需返回
NULL
,但在其他情况下,您可能会发现自己正在查看核心转储。

ftell
将告诉您文件指针所在的位置,并且在打开文件后,该位置始终为0

您可以在打开文件之前使用
stat
,或者使用
fseek
在文件中(或在文件末尾)查找一些距离,然后使用
ftell

或者您将检查延迟到以后,即您尝试读取需要读取的内容,然后验证是否成功

更新:说到支票,您不能保证

// argv[1] will contain the file name input. 
为此,您需要检查
argc
是否至少为2(第一个参数是可执行文件名)。否则,您的文件名可能是
NULL
fopen
应该只返回
NULL
,但在其他情况下,您可能会发现自己正在查看核心转储。

您可以使用并调用
st\u 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;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
如果(argc!=2){
返回退出失败;
}
const char*filename=argv[1];
结构统计;
如果(stat(filename,&st)!=0){
返回退出失败;
}
fprintf(标准输出,“文件大小:%zd\n”,标准输出大小);
返回退出成功;
}
您可以使用并调用
st\u size
struct成员的值:

#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;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
如果(argc!=2){
返回退出失败;
}
const char*filename=argv[1];
结构统计;
如果(stat(filename,&st)!=0){
返回退出失败;
}
fprintf(标准输出,“文件大小:%zd\n”,标准输出大小);
返回退出成功;
}

我是否需要同时使用ftell()和fseek()?我是否需要同时使用ftell()和fseek()?