我有一个将日志文件条目写入 XML 日志文件的 Windows 服务。我在服务运行时维护日志文件的句柄,并在服务停止时关闭、刷新和处置它。文件写入操作仅由服务进行,我在 FileAccess.ReadWrite 中打开文件流,而共享设置为 FileShare.Read。我希望能够通过另一个应用程序的 XmlRead() 调用打开和查看此文件,但我收到一条错误消息,指出该文件正在被另一个进程使用。我读过另一篇关于此的帖子,并认为这是可能的:Other Thread。
正在使用的写入器被刷新、关闭和处置,并且每次写入文件流都会被刷新。这在.Net中是不可能的,还是我做错了什么?代码的缩减版本如下:
if (_logFS == null)
_logFS = new FileStream(_fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
if (!initFile)
{
_logFS.Seek(-13, SeekOrigin.End);
}
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlWriter.Create(_logFS, settings))
{
if (initFile)
{
writer.WriteRaw("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n");
writer.WriteStartElement("Entries", "http://www.abcdefg.com);
}
writer.WriteStartElement("Exception");
// write out some stuff here.
writer.WriteEndElement();
writer.Flush();
writer.Close();
}
_logFS.Flush();
现在的文件打开代码如下:
_LogDS = new XmlLogFile();
using (FileStream logFS = new FileStream(_fileName, FileMode.Open, FileAccess.Read)
{
_LogDS.ReadXml(logFS);
}