应用程序需要一个计数器,该值将存储在文本文件中.有时它会在很短的时间内发生.
此测试代码经常重写文本文件(fe每100毫秒):
int counter = 0; while (true) { WriteToFile(counter); counter++; Thread.Sleep(100); } private void WriteToFile(int counter) { byte[] buffer = Encoding.ASCII.GetBytes(counter.ToString()); using (FileStream createFile = new FileStream("Counter.txt", FileMode.Create)) { createFile.Write(buffer, 0, buffer.Length); createFile.Close(); } }
除了我们的"可靠测试"之外,它的工作基本上都很好 - 在应用程序运行时停止计算机供电.
令人不快的是 - 在文件中没有任何文本(应该是一个数字)但只有一两个空格字符.
它试图写的丢失的最后一个值是可以理解的,但是使文件不一致真的很糟糕......
尝试使用:
createFile.Flush(); createFile.Close(); createFile.Dispose(); GC.Collect(); GC.WaitForPendingFinalizers();
没有帮助.
我想到了各种选择: -
1)保留当前文件的临时副本,例如重命名旧文件,写入新文件,删除旧文件(或者用临时名称写新文件,删除旧文件,重命名新文件),但也许你也在写出文件通常是为了这种事情
2)编写多个文件,定期清理,例如0001.txt,0002.txt,0003.txt,...等等,每隔10秒删除除最后一个文件以外的所有文件.
3)多次写入同一文件,也许每隔10分钟定期创建一个新文件,再定期清理.
4)使用第三方日志记录平台,例如log4net,它可能防止断电等事情,并可以登录到各种目标,例如文件,数据库,IRC