【问题标题】:get file cursor position in C在C中获取文件光标位置
【发布时间】:2009-12-25 09:40:24
【问题描述】:

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

是否有可能在每次读取后,根据列号和行号知道光标在文件上的“坐标”?

谢谢

【问题讨论】:

    标签: c file io


    【解决方案1】:

    您可以使用ftell

    它不会为您提供行和列的位置,而是从一开始就给出流中的当前位置。

    【讨论】:

      【解决方案2】:

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

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

      另一种方法是

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多