• 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         }    
  • 相关阅读:
    定位--position属性
    浮动
    超链接伪类
    对齐方式
    字体样式
    标准文档流
    CSS
    表单
    框架
    内部类
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8415267.html
Copyright © 2020-2023  润新知