Как найти текущую позицию строки указателя файла в C? - PullRequest
11 голосов
/ 28 марта 2010

Как узнать текущую позицию строки указателя файла?

Ответы [ 3 ]

14 голосов
/ 28 марта 2010

Нет функции, которая выдаст вам текущую строку. Но вы можете использовать функцию ftell , чтобы получить смещение с точки зрения количества символов в начале файла.

4 голосов
/ 28 марта 2010

Вам нужно использовать ftell , чтобы указать позицию в файле.

Если вы хотите текущую строку , вам нужно посчитать количество последовательностей конца строки между началом файла и позицией. Лучший способ сделать это, вероятно, начать с начала файла и просто читать вперед до тех пор, пока вы не доберетесь до позиции, считая последовательности конца строки по ходу.

Если вы хотите, чтобы текущая позиция строки (я предполагаю, что вы имеете в виду, какой символ текущей строки вы используете), вам придется подсчитать количество символов в последовательности конца строки, непосредственно предшествующей позиция и сама позиция.

Лучший способ сделать это (поскольку чтение в обратном направлении не так удобно) - использовать fseek для резервного копирования порции за раз из позиции, считывания порции в буфер, а затем найти последовательность конца последней строки в блоке, вычисляющая разницу между этой точкой и позицией.

4 голосов
/ 28 марта 2010

Нет функции для получения текущей строки; вам придется следить за этим самостоятельно. Примерно так:

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