【发布时间】:2015-12-21 01:24:00
【问题描述】:
过去一天我遇到了一个我无法解决的错误。
我有我的第一个方法是保存玩家数据:
bool Player::savePlayerData() {
ofstream writeFile(getName() + ".bin", ios::out | ios::binary | ios::trunc);
string writeData;
writeData = formatEntityData() + "<" + formatLocationData() + "<" + formatInventory();
writeFile.write(writeData.c_str(), writeData.length() + 1);
writeFile.close();
return true;
}
注意:假设 getName()、formatEntityData()、formatLocationData() 和 formatInventory() 返回字符串并且可以正常工作。
然后我有我的加载播放器数据方法:
bool Player::loadPlayerData(string name) {
ifstream readFile(name + ".bin", ios::in | ios::binary | ios::_Nocreate);
if (readFile.good() && readFile.is_open()) {
string data;
getline(readFile, data, '\0');
vector<string> str = split(data, '<');
parseEntityData(str.at(0));
parseLocationData(str.at(1));
parseInventory(str.at(2));
readFile.close();
return true;
}
readFile.close();
return false;
}
注意:假设 parseEntityData()、parseLocationData()、parseInventory() 有字符串参数,返回 void 并且是函数 注意:假设 split(string, char) 接收一个带分隔符的字符串。 char 并正确拆分为向量
所以,这就是我想要完成的事情(为了简单起见,我们假设 getName() 返回“luke”):
•创建 luke.bin
•将字符串以二进制形式保存到luke.bin
•以字符串形式从luke.bin加载数据
当我运行程序时没有正确读取播放器数据。相反,它返回好像文件中没有任何内容。我究竟做错了什么?任何提示、想法或想法将不胜感激。
关于兄弟的代码!
【问题讨论】:
-
it is normal ACSII text not that weird binary stuff好吧,你给它写普通的 ASCII 文本——你为什么期望它神奇地变成“奇怪的二进制东西”,不管它是什么?it is not properly reading the data in the file“不正确”到底是什么意思?您观察到什么结果,您期望什么,两者有何不同? -
通常,当您在 notepad++ 中打开二进制文件时,它会给出看似随机的字符,而不是实际的字符。但是,更重要的问题是它没有读取写入的数据。