如何在C语言中查找文件指针的当前行位置?

12

我该如何获取文件指针的当前行位置?

3个回答

16

目前没有获取当前行的函数。但是你可以使用ftell函数,通过获取文件开头到当前位置的字符数来得到偏移量。


2
C语言将概念混合在一起,但它们确实是不同的。 - Donal Fellows
13
他说的是“char”,这是C语言中表示“字节”的拼写方式。 - Roger Pate
2
小心。ftell可能不会直接返回文本模式流的有意义的内容。 - jamesdlin

5

没有获取当前行的函数,您需要自己跟踪它。可以像这样:

FILE *file;
int c, line;

file = fopen("myfile.txt", "rt");
line = 0; /* 1 if you want to call the first line number 1 */
while ((c = fgetc(file)) != EOF) {
    if (c == '\n')
        ++line;
    /*
        ... do stuff ...
    */
}

4
你需要使用ftell来确定文件中的位置。
如果你想要当前的,你需要在文件开头和该位置之间计算换行符序列的数量。最好的方法可能是从文件开头开始读取,并向前读取,直到达到该位置,同时计算换行符序列的数量。
如果你想要当前的行位置(我假设你指的是当前行的哪个字符),你需要计算位于该位置之前的换行符序列和该位置本身之间的字符数。
最好的方法(因为向后读取不太方便)是使用fseek从该位置向后备份一块内容,将该块内容读入缓冲区,然后找到该块内容中最后一个换行符序列,计算该点与该位置之间的差异。

“最佳方式”假设您拥有可寻址的设备,而不是像终端或管道一样的输入。它还假定您正在处理可读的文件指针 - 输出流中也有“当前行位置”。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接