【发布时间】:2017-06-26 00:28:41
【问题描述】:
我的团队需要一种安全的方式来在 Windows 10 IOT 上保存文件(小于 100kb)。
文件不会损坏,但如果由于断电等原因保存失败,可以丢失最新版本。
由于文件 IO 发生了显着变化(不再有 File.Replace),我们不确定如何实现它。
我们可以看到:
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
await Windows.Storage.FileIO.WriteTextAsync(file, data);
确实不可靠(它在停止调试或重置设备时反复中断。)我们最终得到一个损坏的文件(全零)和一个 .tmp 文件旁边。我们可以恢复这个 .tmp 文件 我不相信我们应该将我们的解决方案基于未记录的行为。
我们想尝试的一种方法是:
var tmpfile = await folder.CreateFileAsync(fileName+".tmp",
CreationCollisionOption.ReplaceExisting);
await Windows.Storage.FileIO.WriteTextAsync(tmpfile, data);
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
// can this end up with a corrupt or missing file?
await tmpfile.MoveAndReplaceAsync(file);
总之,有没有一种安全的方法可以将一些文本保存到一个永远不会损坏文件的文件中?
【问题讨论】:
-
如果我的回答可以接受,请告诉我们,如果对您有帮助,请将我的回答标记为答案。
-
我们有一个类似的问题附加到一个日志文件。创建新文件似乎是可靠的,正如您所说的“可靠不可靠”,覆盖现有文件。您的新更改将保存在预期的文件名中,但在写入失败时会创建一个具有先前内容的 TMP 文件。
标签: c# io windows-10-iot-core windowsiot