fseek从一行到另一行

时间:2013-11-28 22:42:09

标签: c fseek

我想从file.txt中读取几行缓冲区。

目前我fseekfread循环中的每一行。我知道这些是什么,因为我保留了他们的索引列表。因此,如果我想从第5行到第10行读取,我确切地知道file.txt中的那些行。我永远不必阅读整个文件。

我想做这样的事情:

char buffer[2000]; 
FP *fp;

fseek(fp, start_index, end_index, SEEK_SET);
fgets(buffer, 2000, fp);

我该怎么办? fseek没有采用那么多参数。


Textfile看起来像这样

apple: a fruit.

apple pie: a pie made from apples.

2 个答案:

答案 0 :(得分:0)

如果我理解你是对的,你所要做的就是计算你的部分的长度并阅读而不是最多2000个字符:

fseek(fp, start_index, SEEK_SET);
fread(buffer, sizeof(char), end_index - start_index, fp);

当然,请记住,我没有包含任何长度/错误检查,也没有包含缓冲区的空终止符等。您可以动态分配缓冲区来修复:

long len = end_index - start_index;
char *buffer = new buffer[len + 1];

fseek(fp, start_index, SEEK_SET);
fread(buffer, sizeof(char), len, fp);
buffer[len] = 0;

答案 1 :(得分:0)

你可以这样做。

char buffer[5][1024];//save 5 lines.If a line to a maximum of 1024 characters 
char buff_line[1024];//for fgets buff
FILE *fp = NULL;
int start_line = 0;
int end_line = 4;
int cur_line = 0;
int i;

fp = fopen("file.txt","r");

while(fgets(buff_line,1024,fp))
{
    if (cur_line >= start_line && cur_line <= end_line)
    {
        memcpy(buffer[cur_line - start_line],buff_line,sizeof(buff_line));
    }
    cur_line++;

}
for (i=0;i<=(end_line - start_line);i++)
{
    fputs(buffer[i],stdout);
}