我正在开发一个应用程序,它将保持已完成的工作的运行索引。
我可以在工作 session 结束时写一次,但我不想在出现问题时冒丢失数据的风险。因此,每次用户进行新条目或更正时,我都会重写到磁盘 (XML)。
private void WriteIndexFile()
{
XmlDocument IndexDoc
// Build document here
XmlTextWriter tw = new XmlTextWriter(_filePath, Encoding.UTF8);
tw.Formatting = Formatting.Indented;
IndexDoc.Save(tw);
}
可以快速连续地触发写入。如果发生这种情况,它会尝试在先前的写入完成之前打开文件进行写入。 (虽然这不正常,但我认为该文件有可能被另一个程序打开以供使用。)
如何检查文件是否可以重写?
编辑澄清:这是自动化实验室数据收集系统的一部分。用户将单击按钮来捕获数据(保存在单独的文件中),并识别数据包所针对的子任务。通常,两次点击之间的间隔为 3-10 分钟。
如果他们犯了错误,他们需要能够返回并更正它,因此这不是仅附加的用法。
最后,这些文件将由其他自动化工具读取,并由人类手动读取。 (XML/XSLT)
大小将受到限制,因为每个工作 session ( worker 轮类或更少)都会生成一个新的索引文件。
进一步的问题:由于压倒性的共识是不使用 XML 并以仅附加模式编写,我将如何解决返回并更正早期条目的要求?
我正在考虑设置一个“脏”标志,并在设置标志后和关闭工作 session 后保存几分钟。如果在那段时间发生多次编辑,则只会发生一次写入 - 不再需要快速用户 - 如果保存失败,还会出现重试/取消对话框。想法?
最佳答案
对于您的情况,XML 是一个糟糕的选择,因为必须在结束标记之前插入新内容。使用 Text 代替,只需打开文件进行追加并将新内容写入文件末尾,请参阅 How to: Open and Append to a Log File 。
您还可以研究一个简单的日志记录框架,例如 log4net并使用它而不是自己处理低级文件。
关于c# - 快速连续重写同一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165124/