我正在读取偏移位置(文件的四分之一)到结尾的文件行:
struct stat st;
stat("file.txt", &st);
int fileSize = st.st_size
int minOffset = fileSize/4;
FILE* file_ptr = fopen("file.txt", "r");
fseek(file_ptr, minOffset, SEEK_SET);
int lineLength = 1000;
char * line;
line = malloc(lineLength);
while (read = getline(&line, &lineLength, file_ptr) != -1) {
printf("%s", line);
}
但我需要的是读取文件中两个字节位置之间的所有行。正如奥拉夫在评论中指出的那样,我还有一个问题,即我的偏移量在线边界处是不必要的。
例如,这可能是我想阅读的maxOffset:
int maxOffset = fileSize / 2;
我想从minOffset位置到maxOffset位置之前的行读取。
该文件由单词(逐行)组成,其长度始终小于1000:
AA
AAS
ABACA
ABACAS
ABACOST
ABACOSTS
ABACULE
ABACULES
ABAISSA
ABAISSABLE
ABAISSABLES
ABAISSAI
ABAISSAIENT
ABAISSAIS
ABAISSAIT
ABAISSAMES
ABAISSANT
ABAISSANTE
ABAISSANTES
ABAISSANTS
ABAISSAS
ABAISSASSE
ABAISSASSENT
ABAISSASSES
ABAISSASSIEZ
ABAISSASSIONS
ABAISSAT
ABAISSATES
....
如何读取两个字节位置之间的文件行?
答案 0 :(得分:2)
你想要函数fread:
int byteStart = 100;
int byteEnd = 200;
line = malloc(byteEnd-byteStart); // Allocate enough space for your data.
fseek(file_ptr, byteStart, SEEK_SET); // Go to your starting point
fread(line, 1, byteEnd-byteStart, file_ptr); // Read until your ending point.
答案 1 :(得分:2)
首先,您需要在1 / 4,1 / 2和3/4点找到线起点的字节位置。要做到这一点:
fseek
到大致位置(例如fseek(filesize/4)
)fgets
以阅读下一个换行符ftell
确定抵消返回的偏移量是四分之一的结束和下一个季度的开始。
阅读文件的四分之一:
fseek
到本季度开始fgets
阅读一行ftell
,了解您是否已达到季度末