太久没写文章了,今天水一篇

前几天写c++读取一个二进制数据文件出了个小问题,发现读不出来,代码大概是如下这样子的

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    fstream fs("data",fstream::binary);
    char data[3];
    fs.read(data,3);
    for(int i=0;i<3;++i){
        cout<<(int)data[i]<<" ";
    }
    cout<<endl;
    return 0;
}

后来发现把fstream换成ifstream就可以了

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    ifstream fs("data",fstream::binary);
    char data[3];
    fs.read(data,3);
    for(int i=0;i<3;++i){
        cout<<(int)data[i]<<" ";
    }
    cout<<endl;
    return 0;
}

或者如果继续用fstream,构造函数中需要显式的传递个in标志位:

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    fstream fs("data",fstream::binary|fstream::in);
    char data[3];
    fs.read(data,3);
    for(int i=0;i<3;++i){
        cout<<(int)data[i]<<" ";
    }
    cout<<endl;
    return 0;
}

在http://www.cplusplus.com/reference/fstream/ifstream/ifstream/中也有说:

in is always set for ifstream objects (even if explicitly not set in argument mode).

主要是我很少用c++中的stream(除了cout),所以对这方面的api不熟悉。在此记录下来备忘。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注