c# - 快速连续重写同一个文件?

标签 c# filesystems

我正在开发一个应用程序,它将保持已完成的工作的运行索引。

可以在工作 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/

相关文章:

c# - Visual Studio 与 EXE 文件中的 DLL 加载时间不同

ios - 查看 iOS 应用程序文件系统中的文件以进行测试?

java - 如何判断 Linux 机器上的目录是否在 Java 中挂载了外部文件系统?

http - 静态目录未得到服务

c# - 通过代码将 MergedDictionaries 添加到样式

c# - C# 中的联合 - 不正确对齐或与非对象字段重叠

javascript - ASP.NET Core 获取 POST FormData() application/x-www-form-urlencoded

c# - 我如何在 Git 中处理 Visual Studio 解决方案和项目文件?

file - 在 Matlab 中检查文件是否打开

linux - 处理大量临时小文件