我想检查我的文本文件是否包含数据。如果文件包含我想要读取的数据。我的问题是我不知道在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 );
}
}
答案 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 );
}
}
希望这有帮助。