C read()问题

我在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)打开文件以避免任何换行转换.使用文本模式可能会使您的假设无效,即文件的长度是您可以从文件中读取的字节数.

在任何情况下,最好在读取和停止之后检查流的状态是否存在错误(而是可以无限期地继续).

上一篇:c – 如何通过读取文件来填充向量?


下一篇:如何查看文本文件是空的还是c中不存在?