在计算机崩溃时调用File.WriteAllText会导致数据丢失

时间:2018-05-24 20:44:55

标签: c# null crash 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配置文件的两台不同计算机上完全相同。 我在断电期间也经历过这种情况。

我知道我不能期望崩溃的计算机能够完美地执行所有代码,然后崩溃。 但是,有什么技巧可以防止丢失在计算机崩溃之前或之前刚刚写入或保存的文件内容? 定期将这些变量保存到文件中的目的是防止计算机崩溃时数据丢失,但显然这种方法并不总是有效。

1 个答案:

答案 0 :(得分:1)

您应该保存为新文件名,然后移动新文件以在保存后替换原始文件。 这样,无论你什么时候被打断,你总是有一个完整的副本。