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

saveGame函数无法写入PlayerData.txt文件问题求助

存档函数写入失败的排查与修复

核心问题1:未使用的文件流占用目标文件

在TakeTurn()函数开头,你创建了一个ofstream saveFile("PlayerData.txt");对象但未使用。这个对象会在函数执行期间持续占用文件锁(默认以截断模式打开,还会清空文件内容),导致后续调用saveGame()时无法重复打开同一文件,最终写入失败。

修复方式:删除这行无用代码:

ofstream saveFile("PlayerData.txt"); // 直接移除该行

核心问题2:重复调用存档函数

在s选项分支里,你连续调用了两次saveGame():

saveGame(ThePlayer, PlayerData); // 冗余的第一次调用
if (saveGame(ThePlayer, PlayerData)) { // 第二次调用

这不仅浪费资源,还会导致重复写入。只需保留一次调用即可:

if (saveGame(ThePlayer, PlayerData)) {
    cout << "Game saved successfully.\n";
} else {
    cout << "Failed to save game.\n";
}

额外排查点

若修复后仍无法写入,检查以下内容:

  • 工作目录偏移:程序运行的当前目录可能不是项目根目录,PlayerData.txt可能被写到了编译输出目录(如Debug/或Release/)。可通过输出当前目录确认:
    #include <filesystem>
    // 在需要的位置添加
    cout << "当前工作目录: " << std::filesystem::current_path() << endl;
    
  • 权限限制:程序所在目录可能无写入权限,尝试将程序移至用户文档等有权限的目录运行。
  • Player类getter有效性:确认GetLevel()、GetGold()、GetExperience()返回的是正确数值,避免写入空值或错误数据。

修复后的存档分支代码示例

case 's':
    if (saveGame(ThePlayer, PlayerData)) {
        cout << "Game saved successfully.\n";
    } else {
        cout << "Failed to save game.\n";
    }
    cin.ignore();
    cin.get();
    return;
    break;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:35:02