52.文件读取多一位的情况解决

  • 用feof读取总是会多读取一位.
    “C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。
    那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。                          总结起来就是feof就是多走一节才能判断是不是到文件末尾,这样就会造成多读取一位.那么这样怎么处理呢?

 

如果是读写文本操作:

1         while (!feof(pf))
2         {
3             char ch = fgetc(pf);
4             
5             if (ch != -1)
6             {
7                 fputc(ch, pf2);
8             }
9         }    

 

如果是读写二进制操作:

1             fseek(pf, 0, SEEK_END);//文件指针移动到末尾(结束的位置)
2         int length = ftell(pf);//获取当前文件指针距离开头的长度
3 
4         fseek(pf, 0, SEEK_SET);//移动当前文件指针到开头(开始的位置)
5         for (int i = 0; i < length; i++)
6         {
7             char ch = fgetc(pf);
8             fputc(ch, pf2);
9         }    

 

posted @ 2018-02-05 00:37  喵小喵~  阅读(188)  评论(0编辑  收藏  举报