我有一个文件,粗略地说,包含应用程序的状态。锁定文件,同时保留在同一个线程中读取/附加/写入/截断的能力?
我要实现以下行为:
- 当应用程序被启动,锁定文件,以使其他应用程序(或用户本身)将能够修改它;
- 从文件读取以前的应用程序状态;
- ...做的工作...
- 更新一个新的状态文件(假定该文件的格式,包括重写整个文件,该文件的长度可能在手术后下降);
- ...做的工作...
- 再次更新文件
- ...做的工作...
- 如果工作失败(应用程序崩溃),锁被取下,并且内容的文件保持原先的工作单元执行后的状态。
看来,要重写该文件,应该打开一个Truncate
选项;这意味着每次他们要重写一个文件时都应该打开一个新的FileStream
。如此看来,行为我想只能通过这种肮脏的方式来实现:
- 当应用程序被启动,读取该文件,然后打开的
FileStream
与FileShare.Read
; - 当一些工作完成后,关闭先前打开的手柄,打开另一个
FileStream
与FileMode.Truncate
和FileShare.Read
,写入数据并刷新FileStream
。 - 当一些工作完成后,关闭先前打开的手柄,打开另一个
FileStream
与FileMode.Truncate
和FileShare.Read
,写入数据并刷新FileStream
。 - 在
Dispose
,关闭句柄曾被打开。
这种方式也有一些缺点:额外FileStream
被打开;在FileStream
关闭和FileStream
打开之间的文件完整性不保证;代码要复杂得多。 有没有其他方法,缺乏这些缺点?
'FileStream.SetLength'正是我一直在寻找的! – penartur 2012-03-20 04:42:47