我在使用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也会在第一次读取后设置。
我不知道我能做些什么来阅读更多内容。请帮忙。
答案 0 :(得分:3)
确保以二进制模式(std::ios::binary
)打开文件,以避免换行。使用文本模式可能会使您的假设无效,即文件的长度是您可以从文件中读取的字节数。
在任何情况下,最好在读取之后检查流的状态,如果出现错误则停止(可以无限期地继续)。
答案 1 :(得分:2)
听起来你的流处于失败状态,此时大多数操作都会立即失败。您需要clear
信息流才能继续阅读。