判断文件结束函数 feof

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断文件结束函数 feof相关的知识,希望对你有一定的参考价值。

  在上一节例2中,程序从一个文件中逐个读取字符并输出到屏幕上显示,在 while 循环中以 EOF 作为文件结束的标志。这种以 EOF 作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的 ASCII 码值的形式存放。我们知道,ASCII 码值的范围是 0~255,不可能出现 -1,因此可以用 EOF 作为文件结束的标志。

  当把数据以二进制形式存放到文件中时,就会有 -1 值的出现,此时不能采用 EOF 作为二进制文件的结束标志。为解决这一问题,ANSI C 提供一个 feof 函数,用来判断文件是否结束。如果遇到文件结束,函数 feof(fp) 的值为 1,否则为 0。feof 函数既可以判断二进制文件是否结束,也可以用来判断文本文件是否结束。

  例1 编写程序,用于把一个文本文件(源文件)复制到另一个文件(目标文件)中。源文件名为 file_a.dat,目标文件名为 file_b.dat。

  程序如下: 

技术分享
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 //声明文件复制函数
 5 void filecopy(FILE *fpin, FILE *fpout);
 6 
 7 int main()
 8 {
 9     FILE *fpin, *fpout;
10     
11     fpin = fopen("D:\\\\TEST\\\\file_a.dat", "r");    //打开输入文件
12     if (fpin == NULL)
13     {
14         printf("Can‘t open this file !\\n");
15         exit(0);        //使用exit函数,必须包含stdlib.h头文件
16     }
17     
18     fpout = fopen("D:\\\\TEST\\\\file_b.dat", "w");    //打开输出文件
19     
20     filecopy(fpin, fpout);                        //文件复制
21     
22     //关闭输入、输出文件
23     fclose(fpin);
24     fclose(fpout);
25     return 0;
26 }
27 
28 //定义 filecopy 函数
29 void filecopy(FILE *fpin, FILE *fpout)
30 {
31     char ch;
32     ch = getc(fpin);    // 先读一个字符,用 feof 函数判断是否为空文件
33     //遇到文件结束标志,函数 feof(fp) 值为1,否则为0
34     while (!feof(fpin))
35     {
36         putc(ch, fpout);
37         ch = getc(fpin);    // 逐个字符进行复制
38     }
39 }
View Code

  源文件:

  技术分享

  目标文件:

  技术分享

以上是关于判断文件结束函数 feof的主要内容,如果未能解决你的问题,请参考以下文章

c++如何判断文件末尾

feof() 函数判断不准确的问题

关于读文件的结束的判别方法(EOF和feof)以及区别

关于EOF和feof()

理解feof与EOF

文本和二进制的加密及获取二进制文件的大小