我正在处理我的游戏,它将用户数据保存在设备上的某些文件中。在游戏崩溃后,用户不会检索这些数据。崩溃后,相应的文件立即为空。此外,下面创建备份文件以保存新数据,以确保不删除旧数据。此备份文件也是空的。
我不明白他们怎么可能是空的。 您可以在下面找到保存功能:
算法形式:
copy file to file_backup
if save data to file_temp then
move file_temp to file
else
delete file_temp
C ++表格:
const std::string path = "dataPlayer.dat";
const std::string backupPath = atPath + "_back";
if (PlatformInterface::fileExists(path))
{
if (PlatformInterface::fileExists(backupPath))
PlatformInterface::removeFile(backupPath);
PlatformInterface::copyFile(path, backupPath);
}
const std::string tempPath = path + "_temp";
// Save in compact form.
XMLError error = dataDocument.SaveFile(tempPath.c_str(), true);
if (error != XML_NO_ERROR)
{
PlatformInterface::removeFile(tempPath);
}
else
{
bool moved = PlatformInterface::moveFile(tempPath, path);
if (!moved)
{
PlatformInterface::removeFile(tempPath);
}
}
如果你有任何想法,我会感谢你!
编辑: PlatformInterface :: copyFile(path,backupPath)方法:
public static void copyFile(final String path, final String destination) {
try {
if (!new File(path).exists())
return;
InputStream in = new FileInputStream(path);
OutputStream out = new FileOutputStream(destination);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
该文件似乎已正确关闭。
答案 0 :(得分:2)
由于程序异常终止,缓冲区可能无法刷新到文件中。
为了防止这种情况,请在每次写入后刷新文件(关闭流或关闭文件描述符)并使用append重新打开它。
根据经验,ext文件系统(如Android中的那个)使用的磁盘缓存比NTFS更多(它会在以后刷新而不是更快)。