Cách tốt nhất để đọc tệp ngược trong C là gì? Tôi biết lúc đầu bạn có thể nghĩ rằng điều này là không sử dụng bất cứ điều gì, nhưng hầu hết các bản ghi vv nối thêm các dữ liệu gần đây nhất ở phần cuối của tập tin. Tôi muốn đọc trong văn bản từ tập tin ngược, đệm nó vào dòng - đó làĐọc một tệp văn bản ngược trong C
abc
def
writing
nên đọc writing, def, abc trong dòng.
Cho đến nay tôi đã cố gắng:
#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;
}
Trong một nỗ lực để đơn giản là đọc một dòng và đệm nó. Xin lỗi vì mã của tôi thật khủng khiếp, tôi rất bối rối. Tôi biết rằng bạn thường phân bổ bộ nhớ cho toàn bộ tệp và sau đó đọc dữ liệu, nhưng đối với các tệp lớn liên tục thay đổi, tôi nghĩ sẽ tốt hơn nếu đọc trực tiếp (đặc biệt nếu tôi muốn tìm kiếm văn bản trong tệp).
Cảm ơn trước
* Xin lỗi quên đề cập đến điều này sẽ được sử dụng trên Linux, vì vậy dòng mới chỉ là NL không CR. *
Bạn có thể có thể [bộ nhớ ánh xạ tệp] (http://en.wikipedia.org/wiki/Memory-mapped_file) và sử dụng số học con trỏ để "đọc" tệp. Có thể đơn giản hơn là phải liên tục nhảy xung quanh với con trỏ tập tin. –
Từ tiêu chuẩn C: 'Một luồng nhị phân không cần hỗ trợ một cách có ý nghĩa các cuộc gọi fseek với giá trị của SEEK_END.' –
Có lẽ bạn có thể đăng nhập vào DB thay vì tệp đơn giản? –