
我最近写了一个 Steam 云存档管理工具,在这里分享介绍一下。
项目地址:https://github.com/Fldicoahkiin/SteamCloudFileManager 支持平台:Windows / macOS / Linux 技术栈:Rust + egui(GUI)+ steamworks-rs(Steam API)

【功能介绍】 - 查看云端文件列表:以树状结构显示所有云存档文件 - 文件操作:下载、上传、删除单个或多个文件 - 路径映射:显示每个云端文件对应的本地硬盘位置 - 冲突检测:计算文件哈希值,对比本地和云端版本 - 备份功能:操作前可以先备份当前状态

【Steam 云同步机制】 Steam Cloud 的工作流程: 1. 游戏把存档写到本地目录(不是直接写到云端) 2. Steam 客户端检测到文件变化后,在后台把文件上传到云端服务器 3. 在另一台电脑上,Steam 会在启动游戏前把云端文件下载到本地 本地缓存位置:Steam/userdata/<你的ID>/<游戏ID>/remote/ 元数据文件:remotecache.vdf 这个文件记录了每个云端文件的状态,包括文件名、大小、修改时间、是否已同步等信息。 格式是 Valve 自定义的键值对格式(VDF),类似 JSON 但语法不同。 【关于存档位置】 不同游戏的存档可能在完全不同的位置: - 有的在"我的文档" - 有的在 AppData - 有的在游戏安装目录 - 有的在 Steam 云目录 这是因为 Steam 有一套 Root 路径系统。游戏开发者在 Steamworks 后台配置存档路径时,使用的是路径宏(比如 WinMyDocuments、WinSavedGames 等)。 Steam 会把这些宏转换成数字 ID(0-12),记录在每个游戏的 remotecache.vdf 文件中。这个 Root ID 到实际路径的对应关系,官方文档没有完整公开,我在仓库里整理了一份映射表,但还不够完善,如果你发现有问题或者想补充,欢迎来 GitHub 提 Issue 或 PR。 常见的 Root ID: - 0 = Steam 云目录 (userdata/.../remote/) - 1 = 游戏安装目录 - 2 = 我的文档 - 4 = AppData/Local - 9 = Saved Games 文件夹 - 12 = AppData/LocalLow (共 13 种,完整映射表见 GitHub 仓库的 ROOT_PATH_MAPPING.md) 另外 appinfo.vdf 是个二进制文件(约 150MB),包含所有游戏的元数据,其中有每个游戏的云存储配置规则(ufs 节),但里面存的是路径宏名称,不是 Root ID 数字。 这个工具会解析 remotecache.vdf 获取 Root ID,然后根据内置的映射表转换成实际路径,所以你能看到每个文件真正存在哪里。 【关于调试模式】 工具需要从 Steam 获取文件下载链接。Steam 客户端内置了一个 Chromium 浏览器,开启调试模式后可以通过 CDP 协议(Chrome DevTools Protocol)连接这个浏览器,注入脚本获取下载链接。 开启方法:Steam 启动参数加上 -cef-enable-debugging 工具里有一键重启 Steam 的按钮,会自动加上这个参数。 【文件操作说明】
操作对应的 API:
- 上传:write_file → 把本地文件写入缓存 - 同步到云端:write_file + sync_cloud_files → 仅上传本地有但云端没有的文件 - 下载:CDP 获取下载链接 → HTTP 下载到本地磁盘 - 删除:delete_file → 同时删除本地缓存和云端 - 移出同步:forget_file → 从云端移除但保留本地文件 - 备份:read_file → 把云端文件读取到本地 - 刷新:VDF 解析器 + CDP 客户端 → 重新获取文件列表 - 文件对比:计算本地和云端文件的 Hash 值进行对比 ub Release 下载:https://github.com/Fldicoahkiin/SteamCloudFileManager/releases macOS Homebrew:brew tap Fldicoahkiin/tap && brew install steam-cloud-file-manager Arch Linux AUR:yay -S steam-cloud-file-manager-bin

【参考资料】 - Steam Cloud 开发者文档:https://partner.steamgames.com/doc/features/cloud - ISteamRemoteStorage 接口:https://partner.steamgames.com/doc/api/ISteamRemoteStorage - Valve VDF 格式说明:https://developer.valvesoftware.com/wiki/KeyValues - steamfiles (Python VDF 解析):https://github.com/leovp/steamfiles - steamworks-rs (Rust Steam API):https://github.com/Noxime/steamworks-rs 项目完全开源,代码在 GitHub 上。 有问题欢迎提 Issue,也欢迎 PR 贡献。 觉得有用的话给个 Star 支持一下。 以上内容如有错误或不准确的地方,欢迎指正。 我对 Steam 内部机制的理解也在不断学习中,欢迎交流讨论。 更详细的技术说明和使用文档请查看 GitHub 仓库的 README。 QQ 交流群:324504270
