一次从文件中读取字符块,然后在C中的下一个循环中读取下一个块

时间:2014-12-10 15:51:22

标签: c++ c file-io fread

假设我在文件中有100个字符。我想一次阅读10个字符,然后使用它然后我想阅读11-20个= 10个字符并与它们一起工作等等。

现在如何使用C读取此数据块?还要说如果只剩下5个字符那么它不应该出错,而是给我一个这个时候读了多少字符的计数。

通过网络找到的所有方法都建议我一次阅读所有字符或逐个阅读字符。我看到了

char but[20];
fread(buf, 1,10, fp);

这看起来很有希望。但我无法将它用于我的目的。阅读第1至第10个字后,我如何指示第11至第20个字符?

需要C解决方案,但也可以使用C ++解决方案。

2 个答案:

答案 0 :(得分:3)

fread()是一个顺序文件操作。你只需要调用它直到EOF或itemsread == 0

do {
    itemsread = fread (buffer, sizeof(char), 10, fp);
    for (i=0; i<itemsread; i++)
        { ... }
} while (itemsread);

答案 1 :(得分:2)

我认为你一次尝试处理10个字节,直到你达到EOF? C库函数int fgetc(FILE *stream)从指定的流中获取下一个字符(无符号字符),并前进该流的位置指示符。所以我们可以尝试将10个字节读入缓冲区,如果遇到EOF,我们处理缓冲区中的n个字节。 也许是这样的:

    int main ()
    {
        FILE *fp;
        char block[10] = {0};
        int c;
        int n = 0; //counter

        fp = fopen("file.txt","r");
        if(fp == NULL) return -1;

        while (c=fgetc(fp)!=EOF)
        {
            block[n] = (char)c;
            ++n;
            while(n < 10 && c=fgetc(fp)!=EOF){
                block[n] = char(c);
                ++n;
            }
            //read 10 chars or end of file find out
            if(c==EOF) {
                //you've read n bytes, do something with those n bytes and,
                break;
            }
            else {
                //do something with your 10 bytes and
                n = 0; // reset n
                continue; //not necessary
            }
        }
        fclose(fp);
        return 0;
    }
相关问题