通过云盘同步游戏存档
原理简述
Why
当下很多游戏都自己支持云同步存档了,就算游戏自己不支持,只要挂在steam下也可以由steam提供云存档,为何我还要写下这篇文章呢?
因为还是有一部分游戏,并不支持云存档,想我这种好几台机的,经常要换机玩的,就非常苦恼了,于是想着借助云盘,来自己实现游戏云存档的功能。
材料:
- 不支持云存档的游戏一个
- 私有云盘一个(我选择的是Windows自带的OneDrive,也可以用各种私有云例如nextcloud等,只要支持自动同步即可)
我们的目标其实很简单,只要可以自动同步存档文件即可,我在A机器上保存存档,然后换到B机器的时候在B机器上就自动帮我同步过来,这样的功能不就是云盘的功能嘛,但是绝大多数云盘同步,同步到本地都是将你的云盘同步到某个文件夹中,不支持同时同步本地的多个文件夹,这样的话用来同步游戏云存档就不合适了呀,毕竟游戏存档根据各个厂商的设定,分布在系统的各个角落,有什么办法呢?在linux的经验告诉我,软连接很适合做这件事,在旧版本的Windows上是没有软连接这个概念的,但是近年来微软在Windows上融入了越来越多的Linux特性,软连接也被加入了,于是我们就可以使用软连接来实现将分散在系统的游戏存档统一到OneDrive同步文件夹下的工作了。
先普及一下什么是软连接
软连接
在Windows上相信大家都接触过快捷方式吧,软连接和快捷方式很像,但是比快捷方式更深入,更底层。快捷方式就是,我有一个文件,假设存放在我分好类的很深的目录中,我每次想要访问它的时候都要进很多层文件夹,但是我又经常要用它,所以我就给这个文件创建了一个快捷方式,这个快捷方式就像一条绳子,一头放在桌面,一头绑着我要的这个放在很深处的文件,然后每次我要用的时候,只需要在桌面拉拉绳子就能直接拿到这个文件了
HOW
快捷方式的这个思维,很适合拿来将分散的存档文件集中到OneDrive同步文件夹中,有人说,我只要把存档文件的目录放在OneDrive里,然后创建个快捷方式放在存档的实际位置不就好了吗,很遗憾事情没有那么简单,快捷方式是应用层面的快捷方式,他对应用来说不透明,应用程序读取这个快捷方式的时候会把他当成文件,而非指向目的文件夹的传送门,这时候就需要软连接出场了。软连接和快捷方式很类似,但是和快捷方式不同的是,软连接是系统层的快捷方式,它直接工作在磁盘层级,对应用是透明的,也就是说,应用访问这个软连接的时候,如果不调用系统层的特权API(需要管理员权限),是无法发现他是软连接的,而是直接把它当成正常文件处理,当访问它时系统会自己将这个访问请求传送到正确的文件那里,就能很好的达成我们的需求了。
既然是一个类似快捷方式的东西,那么存档就需要花开两地:一边要在游戏存档目录,一边要在OneDrive同步文件夹中。那么哪边放存档的本体哪边放软连接呢? 经过综合考虑,我选择在OneDrive中放本体,在游戏存档目录创建到OneDrive中对应目录的软连接。这么做是应为:
- 软连接实际上也是一个类似快捷方式的东西,当应用程序对系统的调用足够深层的时候是可以发现它是一个软连接的。很明显,微软自己开发的OneDrive肯定要比游戏对系统调用耦合的更深,所以我们把本体放在OneDrive这边更保险
- 当到新的机器的时候,我们只要在游戏目录创建到OneDrive的软连接即可,否则如果反过来,OneDrive里放软连接的话,到了新的机器上处理起来很麻烦
实际操作
要完成上述所说,首先我们要运行一次游戏,并且存档,在系统中找到存档的位置(以Satisfactory为例,存档位置在%LocalAppData%\FactoryGame\Saved\SaveGames
目录下,而在%LocalAppData%\FactoryGame\Saved
目录下还有一些其他的存档文件,如当前机器的画面设置之类的,这些属于不应该同步的内容,我们只需要同步游戏进度就好了,所以我选择将%LocalAppData%\FactoryGame\Saved\SaveGames
目录作为同步目录。
实际步骤:
- 当运行游戏并创立存档后,我们关闭游戏,然后到
%LocalAppData%\FactoryGame\Saved
目录下,将SaveGames目录移动到OneDrive目录中你想要的位置,例如我存放的是OneDrive\GameSaves\FactoryGame\Saved\SaveGames
- 然后以管理员身份运行cmd(必须是cmd,再powershell下没有mklink命令,我没研究在powershell下如何创建软连接)然后运行命令
cd %LocalAppData%\FactoryGame\Saved
进入到%LocalAppData%\FactoryGame\Saved
文件夹下 - 再运行命令
mklink /D SaveGames %HOMEPATH%\OneDrive\GameSaves\FactoryGame\Saved\SaveGames
创建名为SaveGames(即移动走的那个存档文件夹名)到OneDrive下的游戏存档目录的软连接 - 进游戏测试可以正常读取保存存档即可,当保存存档后你可以看到OneDrive已经在后台默默同步你的存档了。
当到一台新的机子上时,你想要使用你在OneDrive上的存档,只需要执行上面的2-4步即可(第二步中,如果文件夹不存在则手动创立)
PS:
- 文中涉及到的同步软件OneDrive可以换别的功能类似的软件
- 需要同步别的游戏,找到游戏存档目录后将上文操作中的路径换位实际游戏存档目录即可