我有一个计时器函数,它每分钟将一个对象序列化为一个 xml 文件。它工作了一段时间,但大约 38 小时后,它出现了下面的 IO 异常。
我可以看到目录在那里,正如您在我的屏幕截图中看到的那样。此外,当此问题发生时,我什至可以在 dos 中键入以下命令: echo "test" > test.xml 并且可以在该确切目录位置创建 test.xml 文件。
我的代码如下:
try
{
if (!Directory.Exists(filePath))
this.log.Write(LogLevel.Fatal, this.componentName, "Directory not exists: " + filePath);
lock (lockObject)
{
filepath = filepath + "ApplicationState.xml";
if (File.Exists(filePath))
File.Delete(filePath);
if (this.StateObject != null && !File.Exists(filePath))
{
using (Stream sWrite = File.Create(filePath))
{
this.Serializer = new XmlSerializer(typeof(State));
this.Serializer.Serialize(sWrite, this.StateObject);
}
}
}
}catch (Exception ex)
{
if (this.log != null)
{
this.log.Write(ex, this.componentName);
}
}
finally
{
if (this.StreamWriter != null)
{
this.StreamWriter.Close();
}
bRun = true;
}
我尽力检查代码以确保没有任何挂起的 IO 资源,在这一点上,老实说,我很迷茫……window CE 或 C# 是否有某种类型的锁定资源除了我用来打开和读取文件的 IO 之外的通用 IO?