查找并附加到文件而不将其加载到内存中?
Find and append to file without loading it in memory?
我正在编写一个简单的 XML 日志文件,如下所示:
<root>
<objects>
</objects>
</root>
第一次创建文件是这样的
using (xmlWriter = new XmlTextWriter(filePathAndName, System.Text.Encoding.UTF8))
{
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("root");
xmlWriter.WriteStartElement("objects");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
现在我需要将对象(字符串格式的序列化数据合同)放置在对象标签内 而不将其加载到内存。
我找到了很多关于如何执行此操作的建议,但所有建议都将整个文件加载到内存中,当文件很大时,这并不好。
我的想法是:
- 用某种 reader
打开文件
- 从文件末尾搜索到
</objects>
标记
- 存储索引并关闭 reader/file
- 再次打开文件,但这次是以作者的身份
- 将序列化数据合约写入索引(就在
- 关闭文件
但是我不确定如何在 C# 中正确执行此操作?
在这种情况下,我的解决方案是 XML 包含技术,它并不完美,但登录要简单得多。我可以使用 appendToFile 而不是操作或读入内存。
我正在编写一个简单的 XML 日志文件,如下所示:
<root>
<objects>
</objects>
</root>
第一次创建文件是这样的
using (xmlWriter = new XmlTextWriter(filePathAndName, System.Text.Encoding.UTF8))
{
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("root");
xmlWriter.WriteStartElement("objects");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
现在我需要将对象(字符串格式的序列化数据合同)放置在对象标签内 而不将其加载到内存。
我找到了很多关于如何执行此操作的建议,但所有建议都将整个文件加载到内存中,当文件很大时,这并不好。
我的想法是:
- 用某种 reader 打开文件
- 从文件末尾搜索到
</objects>
标记 - 存储索引并关闭 reader/file
- 再次打开文件,但这次是以作者的身份
- 将序列化数据合约写入索引(就在
- 关闭文件
但是我不确定如何在 C# 中正确执行此操作?
在这种情况下,我的解决方案是 XML 包含技术,它并不完美,但登录要简单得多。我可以使用 appendToFile 而不是操作或读入内存。