C ++ read()问题

时间:2011-10-25 17:40:55

标签: c++ io large-files ifstream

我在使用Visual Studio 2010中的C ++中将大文件读入我自己的缓冲区时遇到了问题。下面是我的代码片段,其中length是我正在读取的文件的大小,bytesRead设置为0之前这是运行,文件是std :: ifstream。

    buffer = new char[length];
    while( bytesRead < length ){
        file.read( buffer + bytesRead, length - bytesRead );
        bytesRead += file.gcount();
    }
    file.close();

我注意到gcount()在第二次读取和之后返回0,这意味着read()没有给我任何新字符,所以这是一个无限循环。我想继续阅读文件的其余部分。我知道即使文件中有更多数据,eofbit也会在第一次读取后设置。

我不知道我能做些什么来阅读更多内容。请帮忙。

2 个答案:

答案 0 :(得分:3)

确保以二进制模式(std::ios::binary)打开文件,以避免换行。使用文本模式可能会使您的假设无效,即文件的长度是您可以从文件中读取的字节数。

在任何情况下,最好在读取之后检查流的状态,如果出现错误则停止(可以无限期地继续)。

答案 1 :(得分:2)

听起来你的流处于失败状态,此时大多数操作都会立即失败。您需要clear信息流才能继续阅读。