我正在對我的遊戲進行操作,該遊戲將用戶數據保存在設備上的某些文件中。遊戲崩潰後,用戶不會檢索這些數據。崩潰後立即相應的文件是空的。此外,下面將創建一個備份文件以保存新數據,以確保舊數據不會被刪除。該備份文件也是空的。Android - 文件在崩潰後清空
我不明白他們怎麼可能是空的。 你可以找到保存功能如下:
算法形式:
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(路徑,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();
}
}
的文件似乎是正確關閉。
重要的是:爲什麼它崩潰以及如何防止這種情況.. – Opiatefuchs 2014-09-30 11:25:17
崩潰可能是由於應用程序錯誤,但也可能是由於設備關機(低電量,關鍵設備故障)。 – flchaux 2014-09-30 12:55:17