我对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,所以在每行的末尾我只增加1,但是文件中有2个字节。所以我的问题是:如何分别获得CR和LF?
答案 0 :(得分:11)
尝试
f.read(&b, 1);
<<
和get()
都适用于 text ,而非二进制数据。
答案 1 :(得分:1)
我终于以二进制模式打开文件了(感谢Alex引起我的注意)。
似乎CR角色混淆了ifstream和cout,这引起了我的困惑,我会牢记这一点。