Ifstream早期打击eof

时间:2017-10-27 09:46:24

标签: c++ file

我试图将BMP图像文件读入内存但是我的代码一直在尽早发布。它读取的像素似乎是正确的。 eof会在每个文件的相同位置重复出现,但是文件之间没有可重复的常见模式。

1024 x 1024 image: file length = 3145782, bytes read = 6154.
256 x 256 image: file length = 196662, bytes read = 24243.
256 x 256 image2: file length = 196662, bytes read = 931.

我无法解决发生什么事情会欣赏一些意见。 下面是我的代码的缩短版本。为了便于阅读,我只删除了安全检查等内容。

std::ifstream file(filename, std::ios::in || std::ios::binary);

file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);
std::cout << "file length = " << length << "\n";

//Read Header in and confirm this is actuall a bmp file.
file.read((char*)header, 54);

dataPos = *(int*)&(header[0x0A]);
imageSize = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);

std::cout << imageSize << "," << width << "," << height << "\n";

data = new unsigned char[imageSize];
file.read((char*)data, imageSize);
std::cout << "bytes read: " << file.gcount() << "\n";

file.close();   

1 个答案:

答案 0 :(得分:3)

  

std :: ifstream文件(filename,std :: ios :: in || std :: ios :: binary);

您正在使用逻辑||运算符代替按位| stream标志参数中的运算符。如果位掩码被证明是实现为整数或普通枚举类型,则不会发生错误,并且结果标志将转换为1(无论这种标志值在您的实现中是什么意思)。