用C ++读取/写入文件

时间:2017-02-04 02:30:15

标签: c++ file io

尝试读取/写入程序时正确写入文件但未正确读取。

其中l,w,n为intstransposedbool

void Matrix::operator >> (ifstream & f)
{
    f >> l; //length (int)
    f >> w; //width (int)
    f >> n; //size (int)
    f >> transposed; //(bool)

    theMatrix = vector<double>(0);
    double v;
    for (int i = 0; i < n; ++i) {
        f >> v;
        cout << " pushing  back " << v << endl;
        theMatrix.push_back(v);
    }
}

void Matrix::operator<<(ostream & o)
{
    o << l;
    o << w;
    o << n;
    o << transposed;

    //theMatrix is a vector<double>
    for (double v : theMatrix) {
        o << v;
    }
}

我假设问题是由于read operator >>不知道在写operator <<没有写入一定量的位/字节时要读取多少字节。有没有办法澄清读/写的字节数,以便我的程序相应地写入?

我不是C ++的新手,但我对其IO结构不熟悉。我被Java的序列化方法所破坏。

1 个答案:

答案 0 :(得分:1)

您要打印的值之间需要空格,因此当您在其中读取它时,它会知道每个值的结束位置。在它们之间留一个空格。为T类型定义输出运算符的正确方法是使用签名std::ostream& operator<<(std::ostream, const T&)

std::ostream& operator<<(std::ostream o, const Matrix& m)
{
    o << m.l << ' ' << m.w << ' ' << m.n << ' ' << m.transposed << ' '; 

    //theMatrix is a vector<double>
    for (double v : m.theMatrix) {
        o << v << ' ';
    }
}