将字符串向量保存到磁盘不能按预期工作。 我看到该文件已创建但有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();
知道我为什么看不到任何条目?其次,当我能够将内容保存到磁盘时,你能否给我一个如何读取数据的提示?
答案 0 :(得分:5)
这是你的问题:
for (int i = 0; i > taskVector.size(); i++)
仔细看看那条线。
编辑:至于您的更新,这里有一些提示:
std::getline()
逐行阅读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)。