写入二进制文件

时间:2011-11-30 16:53:48

标签: c++ binary fstream

#include <iostream>
#include <fstream>

using namespace std;

class info {

private:
    char name[15];
    char surname[15];
    int age;
public:
    void input(){
        cout<<"Your name:"<<endl;
            cin.getline(name,15);
        cout<<"Your surname:"<<endl;
        cin.getline(surname,15);
        cout<<"Your age:"<<endl;
        cin>>age;
        to_file(name,surname,age);
    }

    void to_file(char name[15], char surname[15], int age){
        fstream File ("example.bin", ios::out  | ios::binary | ios::app);
    // I doesn't know how to fill all variables(name,surname,age) in 1 variable (memblock) 
        //example File.write ( memory_block, size ); 

File.close();
    }

};

int main(){

info ob;
ob.input();

 return 0;
}

我不知道如何在文件中写入多于1个变量,请帮助,我包含了一个例子;)也许有更好的方法来写一个文件,请帮我这个,这对我来说很难解决。

2 个答案:

答案 0 :(得分:16)

对于 text 文件,您可以使用与<<使用的std::cout相似的age轻松输出每行一个变量。

对于二进制文件,您需要使用std::ostream::write(),它会写入一个字节序列。对于reinterpret_cast属性,您需要const char*这个到int并写入为您的机器架构保留name所需的字节数。请注意,如果您打算在其他计算机上阅读此二进制日期,则必须考虑word sizeendianness。我还建议您在使用之前将surnameto_file()缓冲区置零,以免最终在二进制文件中出现未初始化内存的假象。

此外,无需将类的属性传递给#include <cstring> #include <fstream> #include <iostream> class info { private: char name[15]; char surname[15]; int age; public: info() :name() ,surname() ,age(0) { memset(name, 0, sizeof name); memset(surname, 0, sizeof surname); } void input() { std::cout << "Your name:" << std::endl; std::cin.getline(name, 15); std::cout << "Your surname:" << std::endl; std::cin.getline(surname, 15); std::cout << "Your age:" << std::endl; std::cin >> age; to_file(); } void to_file() { std::ofstream fs("example.bin", std::ios::out | std::ios::binary | std::ios::app); fs.write(name, sizeof name); fs.write(surname, sizeof surname); fs.write(reinterpret_cast<const char*>(&age), sizeof age); fs.close(); } }; int main() { info ob; ob.input(); } 方法。

% xxd example.bin
0000000: 7573 6572 0000 0000 0000 0000 0000 0031  user...........1
0000010: 3036 3938 3734 0000 0000 0000 0000 2f00  069874......../.
0000020: 0000                                     ..

示例数据文件可能如下所示:

{{1}}

答案 1 :(得分:5)

File.write(name, 15);
File.write(surname, 15);
File.write((char *) &age, sizeof(age));