在C中获取文件光标位置

时间:2009-12-25 09:40:25

标签: c file io

我正在用fgetc读取一个文件,所以每次读取一个字符时,光标位置都会被更改。

每次读取后,是否可以在列和行号方面知道光标在文件上的“坐标”?

由于

2 个答案:

答案 0 :(得分:7)

您可以使用ftell

它不会在行和列方面给出位置,而是从一开始就给出流中的当前位置。

答案 1 :(得分:5)

文件中没有“坐标”,只有一个位置。文本文件只是一个字节流,行由换行符分隔。因此,在读取文本文件时,如果扫描整个文件,则可以计算“坐标”。这意味着,如果你真的需要一些“行”和“列”值:

  • 逐行读取文件。计算换行符,然后得到“行”号。请注意,不同的操作系统上有不同的换行符 - unix行结尾与Windows不同。
  • 逐个字符地阅读有问题的行,并将字符计数到相关位置。这将为您提供“列”编号。您显然需要接受“列”的数量可以在“行”之间变化,并且完全可以使“行”的“列数”为0。

另一种方法是

  • 逐行读取文件并构建换行符的位置数组(使用ftell)。
  • 现在要确定任何角色的位置只是在文件中找到它的位置,然后找到最近的前一个换行符。从换行计数到你获得“行”的字符,从换行符位置和当前位置之间的差异得到“列”。

但最重要的是接受文件中没有行或列 - 文件中有一个位置,但文件本身只是一个字节流。这也意味着您需要以不同方式处理用宽字符集编码的文件,因为字符不再映射到字节。