仅读取二进制文件的第一行

时间:2018-12-03 20:32:15

标签: c++ binary

函数应该创建Complex(我的结构)矢量,然后将其保存到二进制文件并从二进制文件读取它。问题在于它只读取第一行。

结构很好。除了阅读外,其他所有东西都运行良好。这些是读写功能:

void saveVectorBin(vector<Complex> &v, const string filename) {
    ofstream output;
    output.open(filename, ios::binary);
    if (output)
    {
        for (auto i: v) {
            output.write(reinterpret_cast<char*> (&i), sizeof(i));
            output << endl;
        }
        cout << "Wektor zapisany do pliku " << filename << endl;
        output.close();
    }
    else cout << endl << "BLAD TWORZENIA PLIKU BIN" << endl;
}

vector<Complex> readComplexVectorBin(const string &filename) {
    vector<Complex> v;
    ifstream input;
    input.open(filename, ifstream::binary);
    if (input) {
        Complex line;
        while (input.read(reinterpret_cast<char*> (&line), sizeof(Complex))) {
            v.push_back(Complex(line));
        }
        input.close();
    }
    else cout << endl << "BLAD ODCZYTU PLIKU" << endl;
    return v;
}

应显示:

26.697 + 7.709i
20.133 + 23.064i
9.749 + 8.77i 

相反,它显示:

26.697 + 7.709i
1.43761e-57 + 1.83671e-43i
1.26962e+306 + -2.39343e-259i

1 个答案:

答案 0 :(得分:1)

您的问题是您要在二进制文件中插入换行符。

output << endl;

将数据添加到您的文件中

while (input.read(reinterpret_cast<char*> (&line), sizeof(Complex))) {
    v.push_back(Complex(line));
}

没有考虑在内。您要么需要在编写循环中摆脱output << endl;(最简单的解决方案),要么在阅读循环中读取并丢弃换行符(最困难的解决方案)。