我在Visual Studio 2010中用C语言将大文件读入我自己的缓冲区时遇到了问题.下面是我的代码片段,其中length是我正在读取的文件的大小,bytesRead在运行之前设置为0 ,file是std :: ifstream.
buffer = new char[length];
while( bytesRead < length ){
file.read( buffer + bytesRead, length - bytesRead );
bytesRead += file.gcount();
}
file.close();
我注意到gcount()在第二次读取时返回0,这意味着read()没有给我任何新字符,所以这是一个无限循环.我想继续阅读文件的其余部分.我知道即使文件中有更多数据,eofbit也会在第一次读取后设置.
我不知道我能做些什么来阅读更多内容.请帮忙.
解决方法:
确保以二进制模式(std :: ios :: binary)打开文件以避免任何换行转换.使用文本模式可能会使您的假设无效,即文件的长度是您可以从文件中读取的字节数.
在任何情况下,最好在读取和停止之后检查流的状态是否存在错误(而是可以无限期地继续).