English | 简体中文
基于 Rust 和 egui 构建的跨平台 Steam 云存档管理工具
基于 Rust 与 Steamworks SDK 开发的云存档管理工具。通过直接调用 Steam 底层接口,实现了对云端文件的完全可视与控制。支持任意文件的上传、下载与删除,并提供软链接同步功能,有效解决了部分游戏配置文件无法跨平台同步的问题。
- VDF 文件树可视化:完整解析
remotecache.vdf,还原云端目录结构。 - 批量传输:支持多文件选择与拖拽上传/下载。
- 深度控制:直接删除云端文件,强制更新同步状态。
- Root 路径映射:自动转换 Root ID (0-12) 为本地磁盘绝对路径。
- 搜索与过滤:支持文件名、路径及同步状态的正则表达式检索。
- 游戏库扫描:通过解析
libraryfolders.vdf自动发现本地游戏。 - 软链接同步:支持将非原生支持的本地文件通过软链接挂载至 Steam Cloud(实验性)。
- 多平台支持:Windows / macOS / Linux。
支持 Windows (x64)、macOS (Intel & Apple Silicon) 以及 Linux (x64)。 构建产物包含常规的安装包及免安装版本(Generic Binary / AppImage)。
注:由于 Steamworks SDK 的上游限制,目前无法构建 Windows 和 Linux 的 ARM64 版本。
注意:
- Windows 版本日志保存在应用所在目录的
logs/文件夹。- macOS 版本日志保存在
~/Library/Logs/SteamCloudFileManager/目录。- Linux 版本日志保存在
~/.local/share/SteamCloudFileManager/logs/目录。
安装(推荐,自动安装到应用程序):
brew tap Fldicoahkiin/tap
brew install --cask steam-cloud-file-manager如果安装后提示应用损坏,请运行:
xattr -cr "/Applications/Steam Cloud File Manager.app"
作为 Formula 安装(仅提供终端启动命令):
brew install steam-cloud-file-manager-
下载对应版本:
-
打开 DMG 文件
-
将应用拖入 Applications 文件夹
-
如遇 "损坏" 或 "无法打开" 提示,请在终端执行以下命令修复签名:
xattr -c "/Applications/Steam Cloud File Manager.app"
yay -S steam-cloud-file-manager-bin
# 或
paru -S steam-cloud-file-manager-bin手动构建:
git clone https://aur.archlinux.org/steam-cloud-file-manager-bin.git
cd steam-cloud-file-manager-bin
makepkg -si
steam-cloud-file-managertar -xzf SteamCloudFileManager-*-linux-x86_64-aur.tar.gz
cd SteamCloudFileManager-*-linux-x86_64-aur
makepkg -si
steam-cloud-file-managersudo dpkg -i steam-cloud-file-manager_*.deb
sudo apt-get install -f
steam-cloud-file-managersudo dnf install ./steam-cloud-file-manager-*.rpm
steam-cloud-file-managerchmod +x SteamCloudFileManager-*.AppImage
./SteamCloudFileManager-*.AppImagetar -xzf SteamCloudFileManager-*-linux-x86_64.tar.gz
./steam-cloud-file-managergit clone https://github.com/Fldicoahkiin/SteamCloudFileManager.git
cd SteamCloudFileManager
cargo build --release构建依赖:
-
Cargo
-
Rust 1.90.0+
- 使用 Rust 2021 edition
- 安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
C++ 编译工具链:
- Windows:
- Visual Studio 2019 或更新版本(推荐安装 "Desktop development with C++" 工作负载)
- 或 Build Tools for Visual Studio
- macOS:
- Xcode Command Line Tools:
xcode-select --install
- Xcode Command Line Tools:
- Linux:
- gcc/g++ 或 clang
- Ubuntu/Debian:
sudo apt install build-essential - Fedora:
sudo dnf install gcc gcc-c++ - Arch:
sudo pacman -S base-devel
- Windows:
运行依赖:
- Steam 客户端(必须以调试模式运行)
本工具使用 CDP 协议与 Steam 通信,必须以调试模式启动 Steam。
为什么需要调试模式?
- CDP(Chrome DevTools Protocol)是 Steam 内置浏览器的调试接口
- 我们通过这个接口获取云端文件列表和下载链接
- 只有开启调试模式,CDP 端口才会启用
Windows:
- 右键点击 Steam 快捷方式,选择“属性”
- 在“目标”栏末尾添加:
-cef-enable-debugging - 点击“确定”并启动 Steam
macOS:
-
退出 Steam
-
在终端执行:
open -a Steam --args -cef-enable-debugging
Linux:
-
关闭 Steam
-
在终端执行:
steam -cef-enable-debugging &或者修改 Steam 快捷方式,在 Exec 行末尾添加
-cef-enable-debugging
注意: 本软件提供了“以调试模式重启 Steam”按钮,可以自动根据引导完成上述操作。
- 确保 Steam 已运行在调试模式。
- 选择目标游戏:
- 游戏库选择:点击游戏库按钮选择本地游戏(会自动连接)。
- 手动输入:输入 App ID 后点击 "连接"。
- 加载完成后,可在左侧树状视图中操作文件。
App ID 可以通过 Steam 商店 URL 或 SteamDB 上找到。
⚠️ 警告
- 删除不可逆:删除操作会立即提交至本地缓存,无法撤销。
- 数据安全:建议在批量操作前先备份原始文件。
- 同步机制:文件变更写入本地缓存后,Steam 会在后台异步上传。请勿在同步完成前强制杀掉 Steam 进程。
graph TD
User([用户操作]) -->|选择游戏/文件| App[Steam 云文件管理器]
App --> VDF["VDF 解析器: remotecache.vdf"]
VDF --> PathResolver["路径解析器: Root ID 映射"]
PathResolver --> FileList[文件列表视图]
FileList --> CDP["CDP 客户端: 获取下载链接"]
CDP --> SteamBrowser["Steam 内置浏览器 127.0.0.1:8080"]
SteamBrowser --> CloudPage["云存储页面 store.steampowered.com"]
CloudPage -->|文件列表+下载链接| FileList
FileList -->|上传/下载/删除| SteamAPI["Steam API: ISteamRemoteStorage"]
SteamAPI --> LocalCache["本地缓存 userdata/uid/appid/remote/"]
LocalCache -.->|后台异步同步| CloudServer[Steam 云端服务器]
CloudServer -.->|同步到其他设备| LocalCache
LocalCache -->|刷新| VDF
graph TD
subgraph 操作栏
Upload[上传]
Download[下载]
SyncToCloud[同步到云端]
Delete[删除]
Forget[移出同步]
Compare[文件对比]
Refresh[刷新]
Backup[备份]
end
subgraph SteamAPI[Steam API]
WriteFile[write_file]
ReadFile[read_file]
DeleteFile[delete_file]
ForgetFile[forget_file]
SyncCloud[sync_cloud_files]
end
subgraph 数据获取
CDPClient[CDP 客户端]
VDFParser[VDF 解析器]
end
Upload -->|选择本地文件| WriteFile
WriteFile --> SyncCloud
Download --> CDPClient
CDPClient -->|获取下载链接| HTTP[HTTP 下载]
HTTP --> LocalDisk[本地磁盘]
SyncToCloud -->|仅本地文件上传| WriteFile
Delete --> DeleteFile
DeleteFile --> SyncCloud
Forget -->|从云端移除但保留本地| ForgetFile
ForgetFile --> SyncCloud
Compare --> CDPClient
Compare --> VDFParser
CDPClient -->|计算云端 Hash| HashCompare[Hash 对比]
VDFParser -->|计算本地 Hash| HashCompare
Backup --> ReadFile
ReadFile --> LocalDisk
Refresh --> VDFParser
Refresh --> CDPClient
VDFParser --> FileList[文件列表]
CDPClient --> FileList
SyncCloud -.->|后台异步| CloudServer[Steam 云端]
| 来源 | 数据内容 | 优先级 | 说明 |
|---|---|---|---|
| VDF | 本地缓存的文件列表、同步状态 | 主要 | 解析 remotecache.vdf |
| CDP | 云端实时文件列表、下载链接 | 补充 | 通过 Steam 内置浏览器获取 |
| Steam API | 文件读写、删除、配额查询 | 操作 | ISteamRemoteStorage 接口 |
新上传的文件
is_persisted = false ← 仅在本地缓存
↓
Steam 后台上传(需要数秒到数分钟)
↓
is_persisted = true ← 已同步到云端
⚠️ 重要:sync_cloud_files()调用后会立即返回,实际上传在后台异步进行。断开连接时 Steam 会强制完成同步。
通过 Steam 客户端的 CEF (Chromium Embedded Framework) 调试接口获取云端实时数据:
- 检测: 访问
http://127.0.0.1:8080/json获取调试目标列表 - 连接: 建立 WebSocket 连接到目标页面
- 导航: 跳转到
store.steampowered.com/account/remotestorage - 注入: 执行 JavaScript 提取文件列表和下载链接
- 合并: 将 CDP 数据与 VDF 数据合并,补充下载链接和实时状态
工具实时解析 remotecache.vdf 获取文件列表,同时解析 appinfo.vdf 提取游戏的云存储规则 (ufs 节),自动处理 Steam 的 Root ID 映射系统:
| Root ID | 含义 | 示例路径 (Windows) |
|---|---|---|
| 0 | Cloud (Steam 云目录) | userdata/{uid}/{appid}/remote/ |
| 1 | InstallDir (游戏安装目录) | steamapps/common/GameName/ |
| 2 | Documents (我的文档) | C:/Users/xxx/Documents/ |
| 3 | SavedGames | C:/Users/xxx/Saved Games/ |
- Root 路径映射表 - 完整的路径映射规则
注意:Root 路径映射表仍在持续更新中,不同游戏可能使用不同的 Root 值,且跨平台行为可能不一致。
- 多语言支持(i18n)- 已支持简体中文/English
- 版本更新检测
- 树状视图
- 批量上传/下载
- 文件冲突检测与处理
- 云存档备份
- 软链接同步支持(实验性)
- 自动备份计划
- AUR (Arch User Repository) -
yay -S steam-cloud-file-manager-bin - Homebrew (macOS) -
brew tap Fldicoahkiin/tap && brew install steam-cloud-file-manager - APT 仓库 (Debian/Ubuntu) -
apt install steam-cloud-file-manager - DNF/YUM 仓库 (Fedora/RHEL) -
dnf install steam-cloud-file-manager - Flatpak -
flatpak install steam-cloud-file-manager - Snap -
snap install steam-cloud-file-manager
欢迎提交 Issue 和 Pull Request!详细指南请查看 CONTRIBUTING.md。
- 🐛 报告 Bug:使用 Issue 模板提交问题
- ✨ 请求功能:分享你的想法和建议
- 📖 完善文档:帮助改进 README 和技术文档
- 🌐 贡献翻译:添加新的语言支持,请查看 i18n 贡献指南
- 🗺️ 补充 Root 映射:帮助完善 Root 路径映射表
- 🔧 提交代码:修复 Bug 或实现新功能
当前支持的语言:
- 简体中文
- English
src/
├── main.rs # 入口:初始化日志、启动 eframe
├── app.rs # 主应用:状态持有、UI 渲染循环
├── app_state.rs # 状态结构定义
├── app_handlers.rs # 业务逻辑处理器
├── async_handlers.rs # 异步任务管理(channel 持有)
│
├── steam_api.rs # Steam API 封装(CloudFile 结构)
├── steam_worker.rs # 外部进程通信(JSON RPC)
├── steam_process.rs # Steam 进程管理(启动/关闭)
│
├── file_manager.rs # 文件操作(上传/下载/删除)
├── file_tree.rs # 文件树结构
├── downloader.rs # 批量下载器
├── backup.rs # 备份功能
├── conflict.rs # 冲突检测
├── symlink_manager.rs # 软链接管理
│
├── vdf_parser.rs # VDF 文件解析(appinfo.vdf, loginusers.vdf)
├── path_resolver.rs # 路径解析(savefiles 配置 → 实际路径)
├── cdp_client.rs # CDP 网页解析(获取远程文件列表)
├── game_scanner.rs # 游戏扫描(合并 VDF + CDP)
├── user_manager.rs # 用户管理
│
├── update.rs # 自动更新
├── logger.rs # 日志系统
├── i18n.rs # 国际化
├── icons.rs # 图标系统(Phosphor Icons)
├── version.rs # 版本信息
│
└── ui/
├── mod.rs # UI 模块导出
├── app_panels.rs # 面板渲染(顶部/底部/中心、操作按钮、状态栏)
├── controls.rs # 控件渲染
├── file_list.rs # 文件列表(表格/树状)
├── windows.rs # 窗口(游戏选择、用户选择)
├── settings.rs # 设置窗口
├── theme.rs # 主题系统(颜色/深色模式)
├── upload_dialog.rs # 上传对话框
├── backup_dialog.rs # 备份对话框
├── conflict_dialog.rs # 冲突对话框
├── guide_dialog.rs # 引导对话框
├── appinfo_dialog.rs # AppInfo 对话框
├── symlink_dialog.rs # 软链接对话框
└── font_loader.rs # 字体加载
本项目采用 GPL-3.0 许可证 - 详见 LICENSE 文件
- rfd - 原生文件对话框
- ureq - HTTP 客户端
- anyhow - 错误处理
- tracing - 日志追踪
- serde - 序列化框架
- image - 图像处理
- self_update - 自动更新
- regex - 正则表达式
- chrono - 时间日期
- walkdir - 目录遍历
- open - 打开文件/URL
- dirs - 系统目录
- uuid - UUID 生成
- sha1 - 哈希计算
- byteorder - 字节序处理
- url - URL 解析
- egui-phosphor - Phosphor 图标库
- egui_extras - egui 扩展组件
- cargo-bundle - macOS .dmg
- cargo-deb - Debian/Ubuntu .deb
- cargo-generate-rpm - Fedora/RHEL .rpm
- cargo-appimage - 通用 AppImage
- cargo-aur - Arch Linux PKGBUILD
- Steamworks SDK
- Steamworks Steam Cloud Documentation
- VDF Parser (Python)
- Stack Exchange: Steam Cloud Data
- Quick Guide to Steam Cloud Saves
- Elena Temple Dev Blog: Steam Cloud Saves
