保存当前的读取位置,以便我可以在以后查找

Ric*_*ard 2 c io scanf

我有一个程序读取具有已知结构的文本文件.

例如,我在文件的每一行上有两个整数和一个字符串.

当我fscanf在循环中使用时,我可以重新获得n如上所述的结构.如何在数据文件中获取当前位置,因此我将其存储在某处,然后继续从我之前离开的位置继续读取我的文本文件.

std*_*ave 7

使用ftell()函数.它将返回文件中的偏移量.

unsigned long position = ftell(file);
Run Code Online (Sandbox Code Playgroud)

但是,对于文本文件,知道ftell()可以报告错误的位置非常重要,除非已清除内部缓冲区.去做这个,

unsigned long position;
fflush(file);
position = ftell(file);
Run Code Online (Sandbox Code Playgroud)

之后,你可以使用fseek

fseek(file,position,SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

ftell()告诉我先前使用文件开头的偏移量.在这里,您使用SEEK_SET来指示您传递的位置是从文件的开头.

编辑:理查德询问fflush()的作用.在读取或写入文件时,C库几乎总是保留信息的缓冲区."刷新"该缓冲区是将其写入磁盘,以保存任何更改.由于允许C库处理文本文件的方式,除非刷新缓冲区,否则此缓冲区可能会导致ftell()报告错误的位置.这就是fflush()的作用.