用ifstream读取字节数

Dav*_*ave 6 c++ file-io

我对c ++比较陌生,并且在ifstream方面存在一些问题.我想要做的就是逐字节读取文件,但读取总是在文件中间失败.我的代码:

void read(ifstream&f)
{
    unsigned char b;
    for (int i=0;;++i)
    {
        if(!f.good())
        {
            cout<<endl<<"error at: "<<i;
            return;
        }
        f>>b; // b=f.get(); and f.read(&b, 1); doesnt work either
        cout<<b;
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

它正确读取前几百个字节,然后跳过文件的其余部分.缓冲有什么问题吗?我做错了什么?

编辑:

我刚刚找到了可能是原因的东西:在文件中我使用CRLF行结尾(2个字节),但是所有上述方法只返回LF,所以在每行的末尾我只增加1,但是有文件中有2个字节.所以我的问题是:如何分别同时获得CR和LF?

Bet*_*eta 12

尝试

f.read(&b, 1);
Run Code Online (Sandbox Code Playgroud)

双方<<get()旨在为文本,而不是二进制数据.

  • @Dave,你能给我们一个导致错误的最小文件吗?另外,请告诉我们你如何准备`ifstream`. (2认同)

Dav*_*ave 0

我终于通过以二进制模式打开文件来使其工作(感谢亚历克斯引起我的注意)。

看起来 CR 字符搞乱了 ifstream 和 cout,这引起了我的困惑,我会记住这一点。

  • 为什么不直接接受贝塔的答案呢?这不公平。 (16认同)
  • @qed我想我在我的问题编辑和Beta答案下的评论中都明确表示他的解决方案不起作用。请下次再仔细阅读。 (2认同)