首页 > 解决方案 > 在计算机崩溃时调用 File.WriteAllText 会导致数据丢失

问题描述

我有以下代码来保存数据:

File.Copy("data.txt", "data_backup.txt", true);
File.WriteAllText("data.txt", JsonConvert.SerializeObject(new
{
    bool1,
    string1,
    decimal1,
    decimal2,
    int1,
    datetime,
    object1,
    object2
}, new JsonSerializerSettings { Formatting = Formatting.Indented, Converters = new List<JsonConverter>() { new DontIntendArray() } }));

我的程序每 15 秒执行一次。data.txt 的大小约为 9 MB。

有时当我的计算机崩溃然后重新启动后,我发现 data.txt 充满了 NULL 字符,而它的大小仍然保持在 9 MB 左右。这就是为什么我添加了 data_backup.txt 行但它没有帮助,因为它也保存了充满 NULL 的文件。

请注意,这不会发生在每台计算机上,但显然只有在执行此代码时崩溃时才会发生。

我在我的 RAM 上使用 XMP 配置文件时遇到了这种行为,该配置文件不稳定并且不时导致崩溃。在 XMR 配置文件不稳定的两台不同计算机上,情况完全相同。我在停电时也经历过。

我知道我不能指望崩溃的计算机完美地执行所有代码然后才崩溃。但是,我可以使用任何技巧来防止在计算机崩溃之前或之前写入或保存的文件内容丢失吗?定期将这些变量保存到文件中的全部目的是为了防止在计算机崩溃的情况下丢失数据,但显然这种方法并不总是有效。

标签: c#nullcrashwritealltext

解决方案


您应该保存到一个新的文件名,然后在保存后移动新文件以替换原始文件。这样,无论您何时被打断,您始终拥有一份完整的副本。


推荐阅读