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

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

Ответ 1

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

Ответ 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 для резервного копирования фрагмента на время от позиции, прочитайте кусок в буфер, затем найдите последнюю строку терминатора последовательности в куске, вычисляя разницу между этой точкой и позицией.