首页 文章

如何读取两个字节位置之间的文件行

提问于
浏览
2

我目前正在从偏移位置(文件的四分之一)读取文件行直到结束:

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);
}

但我需要的是文件中的 read all lines between two bytes position . 正如奥拉夫在评论中所说, I also have the issue that my offset is not necesseraly at line boundary.

例如,这可能是我想要阅读的maxOffset:

int maxOffset = fileSize / 2;

I want to read from the line where the minOffset position is to the line before the maxOffset position.

该文件由单词(逐行)组成,其长度始终小于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 
....

如何在两个字节位置之间读取文件行?

2 回答

  • 2

    首先,您需要在1 / 4,1 / 2和3/4点找到线起点的字节位置 . 要做到这一点:

    • fseek 到大致位置(例如 fseek(filesize/4)

    • 调用 fgets 以读取下一个换行符

    • 调用 ftell 来确定偏移量

    返回的偏移量是一个季度的结束和下一个季度的开始 .

    阅读文件的四分之一:

    • fseek 到本季度开始

    • 调用 fgets 来读取一行

    • 致电 ftell ,看看你是否已经到了季度末

  • 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.
    

相关问题