2010-03-28 2 views

ответ

14

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

+2

Не количество символов. Количество байтов. C объединяет понятия, конечно, но они * разные. –

+10

@Donal: Он сказал «char», что и есть «заклинание» байта. – 2010-03-28 16:20:46

+1

Осторожно. 'ftell' может не возвращать что-то прямо значимое для потока текстового режима. – jamesdlin

4

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

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

+0

«Лучший способ» предполагает, что у вас есть устройство для поиска, а не, скажем, терминал или труба в качестве входа. Он также предполагает, что вы имеете дело с читаемым указателем на файл - в выходных потоках также есть «текущая позиция строки». –