【发布时间】:2019-11-13 02:25:30
【问题描述】:
我有一个 c# 控制台应用程序,它经常快速地将大约 1-2mb 的数据写入文件(不断覆盖同一个文件)。然后我像这样在无限循环中运行程序
@echo off
:while
(
C:\sync.exe
goto :while
)
然后c#会这样写文本
private static async Task WriteFile(string filePath, string text)
{
string base_path = AppDomain.CurrentDomain.BaseDirectory;
string file_path = Path.Combine(base_path, filePath);
using (StreamWriter outputFile = new StreamWriter(file_path))
{
await outputFile.WriteAsync(text);
}
}
但我注意到,当我使用 ctrl+c 结束程序或停止调试器时,当它处于写入过程中时,它会停止写入并使文件损坏并丢失数据。
有没有一种方法可以确保如果程序在写入过程中停止,它要么撤消更改(它会覆盖之前存在的文件),要么再次返回旧文件,或者它以某种方式完成写入(其中将需要不到一秒钟)?
【问题讨论】:
-
当一个进程被杀死时,你无法阻止它,我知道。就像关闭计算机电源一样。
-
没有。与机器失去动力没有什么不同。解决方法非常简单,写入一个临时文件并在完成后重命名它。重命名是原子的。
-
是的,但是如果程序在删除旧文件和重命名新文件之间的某个地方结束怎么办?
-
来吧,我们需要思考开箱即用的解决方案
-
你忽略了好的建议,很难帮助你。当然,UPS 不会阻止程序意外终止。
标签: c# file-writing