8

我对 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;
        /* ... */
    }
}

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

编辑:

我刚刚发现了一些可能的原因:在文件中我使用 CRLF 行结尾(2 个字节),但是上述所有方法都只返回 LF,所以在每一行的末尾我只增加了一个,但是有文件中的 2 个字节。所以我的问题是:我怎样才能分别获得 CR 和 LF ?

4

2 回答 2

19

尝试

f.read(&b, 1);

两者<<get()都适用于text,而不是二进制数据。

于 2012-06-22T19:11:45.013 回答
1

我终于通过以二进制模式打开文件来让它工作(感谢 Alex 引起我的注意)。

似乎 CR 字符混淆了 ifstream 和 cout,这引起了我的困惑,我会记住这一点。

于 2012-06-22T19:54:30.423 回答