使用std :: write和std :: read C ++读取和写入包含std :: string到.dat文件的结构

时间:2014-02-14 06:33:03

标签: c++

我有一个结构

struct details
{
   std::string username;
   std::string password;
   bool isActive;
};

struct details v_Details;

我希望将这些数据写入文件,然后在代码中的其他位置读取它作为存储详细信息的方法。我尝试过使用std :: write这似乎可以完成它的工作

std::ofstream out_file;
out_file.open ("db.dat" , ios::out | ios::binary)
out_file.write((char*)&v_details , sizeof (struct details))

但是当我尝试读取数据时,它只读取用户名和密码然后崩溃。

我阅读的部分代码如下

std::ifstream in_file;
in_file.open (fileName.c_str() , std::ifstream::in);

std::string readFileLine = "\0";

if (in_file.is_open())
{
    do
    {
        in_file.read ((char*)&details , sizeof(details));
        cout << "\nDEBUG message-> " << __FILE__ <<" : " << __func__ << " : " << __LINE__ << " : Read - "<< details.username << " " << details.password << " " << isActive ;
    }while (!in_file.eof());

in_file.close();
}

任何可以提供帮助并为我提供解决方法的人。

1 个答案:

答案 0 :(得分:0)

当您拥有没有固定大小的成员时,您无法直接编写该对象并希望它能正确存储所有内容。 如果它是char数组,您可以使用这种方式。

鉴于这种情况,我会首先手动编写详细信息,如username的长度,然后在username中写入字符,以便在阅读时我可以读取用户名的长度并读取该字符数来自档案。