在c中检查文件是否为空

时间:2015-05-08 21:34:44

标签: c

我想检查我的文本文件是否包含数据。如果文件包含我想要读取的数据。我的问题是我不知道在if语句中写的正确条件。 提示:我试图使用fseek&的功能。 ftell,但没有任何好处。 我想知道为什么if语句中的这个条件不能正常工作?

    FILE *fptr;
  if(ftell(fptr)!=0){   //check if the file is not empty.
    if ( !( fptr = fopen( "saving.txt", "r" ))){
        printf( "File could not be opened to retrieve your data from it.\n" );
    }
    else{
        while ( !feof( fptr ) ){
            fscanf( fptr, "%f\n", &p.burst_time );
            AddProcess(&l,p.burst_time);
        }
        fclose( fptr );
    }
   }

2 个答案:

答案 0 :(得分:5)

它确实有效,因为你必须首先将它打开并最终完成:

FILE *fptr;
if ( !( fptr = fopen( "saving.txt", "r" ))){
    printf( "File could not be opened to retrieve your data from it.\n" );
}
else {
    fseek(fptr, 0, SEEK_END);
    unsigned long len = (unsigned long)ftell(fptr);
    if (len > 0) {  //check if the file is empty or not.
        rewind(fptr);
        while ( !feof( fptr ) ){
            fscanf( fptr, "%f\n", &p.burst_time );
            AddProcess(&l,p.burst_time);
        }
    }
    fclose( fptr );
}

答案 1 :(得分:2)

调用ftell()没有告诉你文件的大小,它告诉你文件位置指示器的当前值,当你第一次打开文件时,它总是为0。

使用sys/stat.h并调用st_size成员的值,如果为0,则表示您的文件为空。

基本上,

#include <sys/stat.h>
char* filename; //I'm assuming this was defined somewhere earlier in your code
FILE *fptr;
struct stat fileStat;
stat(filename, &fileStat)

if( fileStat.st_size !=0 ){   //check if the file is not empty.
    if ( !( fptr = fopen( "saving.txt", "r" ))){
        printf( "File could not be opened to retrieve your data from it.\n" );
    }
    else{
        while ( !feof( fptr ) ){
            fscanf( fptr, "%f\n", &p.burst_time );
            AddProcess(&l,p.burst_time);
        }
    fclose( fptr );
}

}

希望这有帮助。