You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity游戏中如何安全写入存档数据?解决中途退出丢失问题

解决存档写入中途退出导致的文件损坏问题

你的代码存在两个关键风险:

  • 直接覆盖目标存档文件,中途退出会导致原文件丢失、新文件不完整
  • 手动调用Flush()和Close()不够可靠,若代码抛出异常可能会跳过这些步骤

推荐解决方案:临时文件原子替换 + using语句

核心逻辑是先将数据写入临时文件,确认写入完成后,再用临时文件替换目标存档文件。这样即使写入中途退出,原存档文件不会被破坏,临时文件的不完整数据也不会影响正常存档。

示例代码:

string savedata = "aaaa"; // 加密后的字符串
string targetPath = "你的存档路径";
string tempPath = targetPath + ".tmp";

// 使用using语句自动管理StreamWriter资源,确保自动完成Flush和Close
using (StreamWriter writer = new StreamWriter(tempPath, false))
{
    writer.WriteLine(savedata);
}

// 确认临时文件写入完成后,替换目标文件
if (File.Exists(targetPath))
{
    File.Delete(targetPath);
}
File.Move(tempPath, targetPath);

额外优化建议

  • 异常处理:添加try-catch块处理文件操作中的异常(比如权限不足、磁盘空间不足等),避免程序崩溃同时保留原存档
  • 原子操作保障:Windows系统中,同一磁盘分区下的File.Move()是原子操作,能保证替换过程不会出现中间状态;尽量让临时文件和目标文件处于同一分区
  • 数据校验:写入临时文件后,可读取临时文件内容与原数据比对,确认写入无误后再执行替换,进一步提升存档完整性

内容的提问来源于stack exchange,提问作者nish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:09:17