-1

fread()出于某种原因(速度和...),我想用于 IO。我有一个不同大小的行的文件。通过使用如下代码:

while( !EOF ){ 
  fread(buffer,500MB,1,fileName);
  // process buffer
}

最后一行可能读不完整,下次试读时必须重新读最后一行,那么如何强制fread()从最后一行的开头继续?

或者如果可能的话,如何强制fread()读取超过 500MB 直到达到 \n 或另一个特定字符?

谢谢大家

阿米尔。

4

1 回答 1

0

假设buffer您已经反转的字节\n在位置找到了一个字符pos,那么您想要回滚到缓冲区的长度减去这个pos。打电话给这个step

您可以使用fseek将文件指针向后移动这么多:

int fseek( FILE *stream, long offset, int origin );

在你的情况下

int ret = fseek(stream, -step, SEEK_END);

这将涉及重新阅读文件的一部分,以及相当多的跳跃——评论提出了可能更快的替代方法。

于 2017-08-07T13:02:00.063 回答