Какой лучший способ прочитать файл назад в C? Я знаю, что сначала вы можете подумать, что это бесполезно, но большинство журналов и т.д. Добавляют самые последние данные в конце файла. Я хочу прочитать текст из файла назад, буферизируя его в строки - это
а
Защита
GHI
должен читать строки ghi, def, abc.
До сих пор я пробовал:
#include <stdio.h>
#include <stdlib.h>
void read_file(FILE *fileptr)
{
char currentchar = '\0';
int size = 0;
while( currentchar != '\n' )
{
currentchar = fgetc(fileptr); printf("%c\n", currentchar);
fseek(fileptr, -2, SEEK_CUR);
if( currentchar == '\n') { fseek(fileptr, -2, SEEK_CUR); break; }
else size++;
}
char buffer[size]; fread(buffer, 1, size, fileptr);
printf("Length: %d chars\n", size);
printf("Buffer: %s\n", buffer);
}
int main(int argc, char *argv[])
{
if( argc < 2) { printf("Usage: backwards [filename]\n"); return 1; }
FILE *fileptr = fopen(argv[1], "rb");
if( fileptr == NULL ) { perror("Error:"); return 1; }
fseek(fileptr, -1, SEEK_END); /* Seek to END of the file just before EOF */
read_file(fileptr);
return 0;
}
В попытке просто прочитать одну строку и буферизировать ее. Извините, что мой код ужасен, я очень запутался. Я знаю, что вы обычно выделяете память для всего файла, а затем читаете данные, но для больших файлов, которые постоянно меняются, я думал, что лучше читать напрямую (особенно если я хочу искать текст в файле).
Заранее спасибо
* Извините, забыл упомянуть, что это будет использоваться в Linux, поэтому новые строки - это просто NL без CR. *