判断文件结束函数 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 }

  源文件:

  

  目标文件:

  

时间: 2024-08-15 22:40:49

判断文件结束函数 feof的相关文章

判断文件结束,feof……

因为文本文件中存储的是ASCII码,而ASCII码中FF代表空值(blank),一般不使用,所以如果读文件返回了FF,说明已经到了文本文件的结尾.但是如果是二进制文件,其中可能会包含FF,因此不能把读到EOF作为文件结束的条件,此时只能用feof()函数. 在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF.然后再调用feof(),才会得到文件结束的信息.因此,如果运行如下程序: char c; whil

php文件操作函数feof函数使用方法

1.feof() 函数检测是否已到达文件末尾 (eof). 如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE. 语法: feof(file) 参数 file 必需.规定要检查的打开文件. file 参数是一个文件指针.这个文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件. 提示:feof() 函数对遍历长度未知的数据很有用. 注意:如

使用feof()判断文件结束时会多输出内容的原因

这是原来的代码: #include <stdio.h>int main(){    FILE * fp;    int ch;    fp = fopen("d:\\aaaaa\\1.txt","r");    while (!feof(fp))    {        ch = getc(fp);        putchar(ch);    }    fclose(fp);    return 0;} 以此来输出时会发现好像输出的内容在结尾部分多了一

判断文件的错误与结束状态

一.标准文件编程库用于文件状态的函数:#include <stdio.h>1.int ferror(FILE* stream);//只是用来判断错误是否发生,不能明确错误的内容当文件IO 发生错误时,ferror返回非0,成功返回02.int feof(FILE* stream);//只是用来判断错误是否发生,不能明确错误的内容当文件结束时,feof返回非0,否则返回0//使用上面俩函数://读取文件,当文件结束时自动退出int main(){    FILE* fp;    char buf

文件结束的判断和结束符的理解

转载自:http://blog.csdn.net/zhy10/article/details/1562649 转载自:http://blog.csdn.net/sambian/article/details/644360 EOF,即end of file,文件结尾,作为文件结束的标志,在程序中常作为判断的一个标志.但在我们平常的程序中却常发生意想不到的结果.下面这段程序,猜猜它输出的是什么?char c;ifstream fin("d://dat");//设d:/dat文件已存在,内容

文件读写函数

字符读写函数:    fgetc / fputc字符串读写函数:fputs / fgets格式化读写函数:fscanf / fprintf二进制读写函数:fread / fwrite其他相关函数:检测文件结尾函数feof检测文件读写出错函数ferror清除末尾标志和出错标志函数clearerr文件定位的函数fseek 字符读写函数fgetc和fputc while( !feof( fp1 ) ){ c = fgetc( fp1 ); fputc(c, fp2); } 函数fputc( )    

转载 - C++ - 关于ifstream/fstream流 判断文件是否结束eof()的问题

出处:http://blog.csdn.net/shuilan0066/article/details/4669451 在做实验的时候遇到这个问题,找原因的时候发现出处除了讲明原因,还举了例子,所以记下来. 其实在循环判断文件是否结束的时候可以直接就流输入放在循环条件那里,但是这里补充使用eof()的一些细节问题.其实这是关于到底什么时候标志位才会变化的问题.总结起来就是只有使用一次流变量来输入输出,标志位才会更新一次. 正文: fstream流的eof()  判断有点不合常理 按正常逻辑来说,

C/C++常用头文件及函数汇总

C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#include <float.h> //浮点数处理#include <iso646.h>        //对应各种运算符的宏#include <limits.h> //定义各种数据类型最值的常量#include <locale.h> //定

c语言文件操作函数

c语言文件操作函数大全 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件