C ++我的ifstream.get()函数发生了什么?

时间:2016-08-07 00:18:55

标签: c++ ifstream

我正在尝试阅读图片文件。

#include <iostream>
#include <fstream>

using namespace std;


int main()
{

    ifstream read("C://Users/Ben/Desktop/1.jpg");

    while (1){
        cout << read.get();
        cin.get();
    }


    return 0;
}

当我这样做时,我得到一系列数字,范围从0到255.所以我假设它正确读取字节值,除了我过早地击中-1(eof)的事实。在大约30到40个值之后,出现-1。这是一个3MB的文件。我不希望-1出现,直到稍后。发生了什么事?

2 个答案:

答案 0 :(得分:0)

作为@melpomene mentioned in their comment,使用std::ios::binary模式打开文件的std::ifstream::get()结果可能会有所不同(至少对于Windows操作系统而言)。< / p>

没有证据表明-1的{​​{1}}值表示std::ifstream::get()流处于read状态。有关详细信息,请参阅std::ifstream::get()参考文档。

答案 1 :(得分:-3)

尝试

#include <iostream>
#include <fstream>

using namespace std;

int main()
{

    // Add the mode ios::binary to make the file load in binary format.

    ifstream read("C://Users/Ben/Desktop/1.jpg", ios::binary);

    // Declare data variable

    int data = 0;

    // Reading loop

    while (read.read((char*)&data, 4) && read.gcount() != 0) {

        // Output data

        cout << data << endl;
    }

    // Wait for user input before closing program

    cin.get();

    return 0;
}