将字符串向量保存到磁盘不起作用

时间:2012-07-03 07:39:33

标签: c++ string file file-format stdvector

将字符串向量保存到磁盘不能按预期工作。 我看到该文件已创建但有0个字节且没有条目。 注意:我在Xcode(v4.3.3)上的MAC OS上编译C ++代码。

向量和字符串的声明:

vector<string>taskVector;
string newTaskEntry;

这是我在程序运行时向数组添加新字符串的方法:

taskVector.push_back(newTaskEntry);

当用户退出程序时,我这样做:

        fstream file;
        file.open("data.txt", ios::out | ios::trunc);

        for (int i = 0; i > taskVector.size(); i++) {
            file.write(taskVector[i].c_str(), taskVector[i].length());
            file.close();

知道我为什么看不到任何条目?其次,当我能够将内容保存到磁盘时,你能否给我一个如何读取数据的提示?

2 个答案:

答案 0 :(得分:5)

这是你的问题:

for (int i = 0; i > taskVector.size(); i++)

仔细看看那条线。

编辑:至于您的更新,这里有一些提示:

  1. 使用std::getline()逐行阅读
  2. 在矢量上使用push_back()插入矢量。

答案 1 :(得分:3)

首先(就像@Nim提到的那样)你的检查错了:

for (int i = 0; i > taskVector.size(); i++) {

应该通过

for (int i = 0; i < taskVector.size(); i++) {

第二:关闭循环:

for (int i = 0; i > taskVector.size(); i++) {
    file.write(taskVector[i].c_str(), taskVector[i].length());
}
file.close();

关于阅读它们: 现在,您不保存任何信息,字符串结束的位置或它们的长度。没有它,你将不得不猜测,字符串和(以及它们有多少)。我会推荐以下其中一项:

取一个终止字节,表示字符串在文件中结束。 '\0'会是个主意。但是你必须确保它不存在于你的琴弦中,或者你无法正确地重新录制它们。回读时,分成那个字符。

另一种方法是将字符串的长度信息存储在字符串前面。你可以在前面存储一个4字节的unsigned int,用于存储字符串。然后,当回读时,首先读回4字节字符串,然后读取数字指示的字节数。问题:你需要决定你的字符串可以达到最大长度(4个字节的长度信息,大约4.8 * 10 ^ 9字节,非常多)。如果您计划在不同的计算机上使用它,您可以检查系统的字节顺序(big endian vs little endian)。