本帖最后由 jackz007 于 2023-11-29 21:29 编辑
feof() 其实是用来测试读取文件内容的操作是否成功,在正常情况下,当采用读模式打开一个文件时,如果文件存在,文件的读写指针会位于文件的开头位置,读取文件的时候,会从读写指针的当前位置开始读取文件的内容,同时,读写指针也会随着此过程同步向文件尾部移动,移动的数值就是读取到的字节数。所以,读文件总是会引起读写指针向后移动,换句话说,如果读文件没有使读写指针向后移动,那么,就是读到文件结束位置了。所以,feof() 必须与读文件的操作配合使用,如果成功读取到了文件内容,那么,feof() 一定会返回 0 值,否则,返回非 0 值。
对于一个空文件而言,文件的开头就是结尾,当从该文件中读取内容时,文件的读写指针无法移动,所以,读文件操作过后,使用 feof() 测试,一定会返回非 0 值。
【代码1】:#include <stdio.h>
int main(void)
{
FILE * file ;
if (file = fopen("abc" , "r")) {
fgetc(file) ;
if(feof(file)) printf("文件为空。\n") ; // feof() 返回非 0 值,代表读取文件的操作无效,读写指针没有移动。
else printf("文件不为空。\n") ;
fclose(file) ;
} else {
printf("无法打开文件\n") ;
}
}
【代码2】: #include <stdio.h>
int main(void)
{
FILE * file ;
size_t filesize ; // size_t 其实就是 unsigned long long
if((file = open("abc" , "rb"))) { // 按二进制读的模式打开文件,这一点非常的关键。
fseek(file , 0 , -1) ; // 把文件读写指针移动到文件结束的位置
filesize = ftell(file) ; // ftell() 会返回文件读写指针距离文件开头的偏移值,单位为字节。
fclose(file) ;
if(! filesize) printf("文件为空。\n") ; // 如果文件长度为 0
else printf("文件不为空。\n") ; // 否则
} else {
printf("无法打开文件\n");
}
}
|