【问题标题】:How to find the current line position of file pointer in C?如何在C中找到文件指针的当前行位置?
【发布时间】:2010-03-28 15:40:23
【问题描述】:

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

【问题讨论】:

    标签: c file pointers file-io file-pointer


    【解决方案1】:

    没有提供当前行的功能。但是您可以使用ftell 函数来获取从文件开头开始的字符数的偏移量。

    【讨论】:

    • 不是字符数。字节数。当然,C 将这些概念混合在一起,但它们不同的。
    • @Donal:他说的是“char”,这就是C拼写“byte”的方式。
    • 小心。 ftell 可能不会返回对文本模式流直接有意义的内容。
    【解决方案2】:

    没有获取当前行的函数;你必须自己跟踪它。像这样的:

    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 ...
        */
    }
    

    【讨论】:

      【解决方案3】:

      您需要使用ftell 为您提供文件中的位置。

      如果您想要当前的,则必须计算文件开头和位置之间的行终止符序列的数量。最好的方法可能是从文件的开头开始,然后简单地向前阅读,直到到达该位置,同时计算行终止符序列。

      如果你想要当前的行位置(我假设你的意思是你在当前行的哪个字符),你必须立即计算行终止符序列之间的字符数在位置之前,以及位置本身。

      最好的方法(因为向后阅读不那么方便)是使用fseek从该位置一次备份一个块,将块读入缓冲区,然后找到最后一行终止符序列在块中,计算该点与位置之间的差异。

      【讨论】:

      • “最佳方式”假设您有一个可搜索的设备,而不是终端或管道作为输入。它还假设您正在处理一个可读的文件指针 - 输出流中也有一个“当前行位置”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      相关资源
      最近更新 更多