【问题标题】:How can I implement a IF to detect the last byte when file reading?如何在文件读取时实现 IF 来检测最后一个字节?
【发布时间】:2017-04-10 21:49:59
【问题描述】:

我正在尝试读取文件并以稍微不同的方式处理最后一个字节。这是我的代码:

 FILE  * file = fopen(path,"rb");
 unsigned char curr;
 while (fread(&in, 1, 1, file) >= 1)
 {
   If (Is_Last_Byte){
      //Does something
   }
   else{
   //Does something else
   }
 }

如何执行此检查?是否可以设置一个指向最后一个字节的指针并在每次循环迭代期间执行此检查?

提前致谢。

【问题讨论】:

  • 文件的“最后一个字节”?还是刚刚读取的缓冲区?
  • fseek(fp, 0L, SEEK_END) 中的“0L”是什么意思?
  • @chux,该文件。
  • fseek(fp, 0L, SEEK_END)fseek(fp, 0, SEEK_END)功能相同

标签: c file io


【解决方案1】:

由于没有任何东西可以将最后一个字节与任何其他字节区分开来,因此最好的办法是始终在您正在处理的字节(缓冲区)之前读取一个字节(或缓冲区)。当预读返回 EOF 时,你就知道你要处理的字节(缓冲区)是最后一个。

这本质上与经常重复的建议相同的逻辑结构,即当read 返回 EOF 时,读取循环应该终止,而不是具有while(!feof(file)) 的形式。 (需要重复建议的事实表明消息在某种程度上没有通过:-))while(!feof(file)) 是错误的,因为最后一个字节不是特殊的;即使读完,也不知道后面没有字节了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多