【发布时间】:2010-11-29 01:15:21
【问题描述】:
我在 Stack Overflow 和其他一些网站上阅读了一些关于将向量写入文件的帖子。我已经实施了我认为有效的方法,但我遇到了一些麻烦。结构中的数据成员之一是类字符串,当重新读取向量时,该数据会丢失。此外,在编写第一次迭代后,额外的迭代会导致 malloc 错误。如何修改下面的代码以实现将矢量保存到文件的所需功能,然后在程序再次启动时将其读回?目前,读取在构造函数中完成,在析构函数中写入,该类的唯一数据成员是向量,但具有操作该向量的方法。
这是我的读/写方法的要点。假设vector<element> elements...
阅读:
ifstream infile;
infile.open("data.dat", ios::in | ios::binary);
infile.seekg (0, ios::end);
elements.resize(infile.tellg()/sizeof(element));
infile.seekg (0, ios::beg);
infile.read( (char *) &elements[0], elements.capacity()*sizeof(element));
infile.close();
写:
ofstream outfile;
outfile.open("data.dat", ios::out | ios::binary | ios_base::trunc);
elements.resize(elements.size());
outfile.write( (char *) &elements[0], elements.size() * sizeof(element));
outfile.close();
结构元素:
struct element {
int id;
string test;
int other;
};
【问题讨论】:
-
您使用的哪些 C++ 学习资料告诉您以这种方式进行文件访问?
-
这是家庭作业的一部分,要求我们使用 fstream 将矢量数据读/写到文件中。由于我们没有完全涵盖在课堂上将矢量写入文件的复杂操作,因此我阅读了 fstream 文档等并查看了在线示例。我决定用二进制编写将是完成此任务的最简单方法。调整大小等某些细节是我选择做的限制文件大小的事情。我们的班级没有正式的书籍或资料。我们有一些在线说明,但它们的详细程度远不及实现我需要的内容。
-
我决定将我的字符串更改为字符数组,并在代码的其他地方进行一些小的修改以支持该更改。切换到字符数组而不是字符串后,上面的代码似乎效果很好。