功能价格文档博客
获取 mote
← 博客
工程·2026年9月3日·阅读需 5 分钟

即使保存过程中意外关闭,也能确保文件不损坏的方法

如果保存时笔记本电脑突然关机,文档会怎么样?在 mote 中,答案是“要么处于保存前,要么处于保存后,只有这两种情况”。

m
mote
状态文件夹中的备份列表。保存前一刻的文件会以文档名称和易于阅读的时间保存下来,而文档文件夹中不会产生任何其他文件。
状态文件夹中的备份列表。保存前一刻的文件会以文档名称和易于阅读的时间保存下来,而文档文件夹中不会产生任何其他文件。

保存文件的瞬间,如果电源断了,会怎么样?

通常,文件可能只保存了一半。对于一款要长期使用的编辑器,不应该发生这种事。因此,即使保存失败,mote 也会保护原始文件。

首先,它会在文档所在的文件夹中创建临时文件。写入全部内容后,将其同步到磁盘,并复制原始文件的权限。准备完成后,再把临时文件改成原来的名称。

改名操作会一次性完成。即使中途断电,留下的也只会是旧文件或新文件。不会留下只保存了一半的文件。

权限也会原样保留。因为保存是在修改内容,而不是改变谁可以读取文件。

文档的字节也不会被擅自改动。无论是 CRLF 换行符、BOM、混合使用的换行符,还是末尾换行符的有无,都会原样保存。如果打开文件后没有修改任何内容,那么再次保存时也不应该有一个字节发生变化。mote 每次发布时都会测试这一原则。

不会切断链接

即使是安全的保存方式,也不能原封不动地用于所有文件。

如果像普通文件一样替换符号链接,链接就会消失。编辑后的内容也不会反映到链接所指向的文档中。mote 会沿着链接找到并保存实际文件。链接会原样保留。

硬链接是由多个名称指向同一个文件。如果只把其中一个名称换成新文件,连接就会断开。因此,对于存在硬链接的文件,会直接在原位置覆盖写入。虽然放弃了原子性,但会通过保存前一刻创建的备份来降低风险。

不保存无法读取的文件

mote 会在保存之前先读取磁盘上的文件。

如果文件不存在,就新建文件。如果能够读取,就在备份后保存。如果文件存在但无法读取,则停止保存。

不受支持的旧编码文档或文件夹,以及没有权限访问的文件,都属于这种情况。如果把无法读取的文件显示成空白文档后再覆盖写入,连用户未能看到的内容也可能全部消失。

无法读取,也就无法创建备份。因此,不保存是保护文件的唯一方法。

不在文档旁边创建备份和草稿

保存之前的文件会备份到状态文件夹中。名称中包含文档名和保存时间。

文档名称.2026-09-07-153914.md

每份文档会保留最近的 20 个备份,并从最旧的开始删除。只看文件名就能知道备份是什么时候创建的,也可以直接使用平时使用的编辑器打开。

从未保存过的文档没有可以备份的原始文件。取而代之的是创建草稿。停止编辑 1 秒后,会在状态文件夹中保存一份副本。名称中包含时间和文档的第一个标题。

保存文件或用户丢弃文档时,草稿也会被删除。应用退出时也是如此。如果有保存位置,就保存为文件;如果没有,就保留为草稿。

因崩溃而残留的临时文件,也会在下次打开文档时清理。不过,如果创建该文件的进程仍在运行,就不会动它。因为另一个窗口可能正在保存。

/tmp 或缓存文件夹中的文档可能会在重启时消失。打开这类文档时,会显示提示,建议将其保存到其他位置。

除此之外,不会在文档文件夹中创建任何辅助文件。设置、备份、草稿以及最后打开的文件信息,全都保存在用户主目录下的状态文件夹中。没有加入需要另行保存 Markdown 无法承载的状态的功能。

打开临时文件夹中的文档时显示的横幅——提示重启后文件可能消失,建议保存到其他位置,旁边有另存为和继续编辑按钮
打开临时文件夹中的文档时显示的横幅——提示重启后文件可能消失,建议保存到其他位置,旁边有另存为和继续编辑按钮

当无法通过撤销恢复时,就需要备份。比如重新打开应用之后,或是过了很久才发现保存有误时。打开备份文件,就能原样查看每次保存覆盖前一刻的文档。

只有在用户允许时才会触碰文件和网络

自动保存必须在设置中由用户亲自开启。也可以选择等待多久后保存。

开启后,会在停止编辑并经过设定的时间后保存。保存方式与手动保存相同。先进行备份,创建临时文件,然后与原始文件交换。自动保存并不是一项独立的保存功能,而是代替用户启动同一次保存操作的计时器。它只在进行编辑时运行。

设置卡片的常规选项卡——有自动保存开关,其下方是自动保存延迟时间(秒)1,最底下一行有启动时检查更新开关。在这张截图中,两者都处于关闭状态
设置卡片的常规选项卡——有自动保存开关,其下方是自动保存延迟时间(秒)1,最底下一行有启动时检查更新开关。在这张截图中,两者都处于关闭状态

检查更新也必须由用户亲自开启。关闭时,mote 不会使用网络。

开启后,会在应用启动后于后台检查一次。“每天一次”并不是由应用计时,而是通过状态文件夹中的时间戳文件来保证。开启应用期间不会再次检查,也没有持续运行的计时器。

即使有新版本,也不会立即下载。只会在屏幕右下角显示通知。在用户点击之前,不会下载、安装或重启。

应用能够直接更新的格式只有 AppImage。因为只需替换一个文件即可。如果是通过 apt 或 Flatpak 安装,则只会提示适当的命令。命令由用户亲自执行。

检查更新时,只会发送平台和发布渠道信息。不会发送能够识别用户身份的信息,也不会发送当前打开的文档信息。

安全的保存,并不是永远都会成功的保存。而是即使失败,也不会丢失内容的保存。

← 较早为了只保存我输入的字节,我们将文件作为唯一事实来源较新 →为了让文档在 git checkout 后也不会变空,我们不看时间戳,而看字节
通过RSS持续关注。
只留下文字
简体中文
© 2026 mote