检查文件是否为空

时间:2018-03-11 09:17:57

标签: c

如何检查文本文件是否有写入内容。我试过了:

LOGIC checkfile(char * filename)
{
    FILE *pf;
    pf=fopen(filename,"wt");
    fseek(pf,0,SEEK_END);
    if(ftell(pf)==0)
    printf("empty");
}

此函数每次都返回空,即使在我的文本文件中,我也只写了几个单词或数字。

3 个答案:

答案 0 :(得分:3)

问题是你打开文件进行写作。执行此操作时,文件中的所有内容都将丢失,文件的长度将被截断为0.

所以你需要打开文件进行阅读。查看文件是否为空的最简单方法是尝试使用fgetc读取第一个字符。如果fgetc返回EOF,则该文件为空。

答案 1 :(得分:2)

首先:不要打开要写的文件!
第二:要了解C中的文件状态,可以使用sys headear文件中的fstat

您可以使用 struct stat 来使用此功能
这是一个简单的例子:

#include <sys/stat.h>

int main(void) 
{ 
    int fields = 0; 
    int size = 0; 

    // Open the file test.txt through open() 
    // Note that since the call to open directly gives 
    // integer file descriptor so we used open here. 
    // One can also use fopen() that returns FILE* 
    // object. Use fileno() in that case to convert 
    // FILE* object into the integer file descriptor 
    if(fields = open(file_path, "r")){
        struct stat buf;
        fstat(fields, &buf);
        size = (int)buf.st_size;
    }

    printf("size of file is %d", size);

   return 0;
   }

注意:我只包含一个与fstat相关的头文件。您可以自己添加其他头文件

答案 2 :(得分:1)

如何使用fscanf读取文件,并检查是否实际读取了某些内容?

FILE *fp;
char buff[255] = "";

fp = fopen(filename, "r");
fscanf(fp, "%s", buff);
if (!*buff)
    printf("Empty\n");
else
    printf("%s\n", buff);
fclose(fp);