我开发了一个简单的应用程序,当我尝试将XMLDocument保存到没有足够可用空间的拇指驱动器时,会发生奇怪的事情。虽然我已经为XMLDocument.Save(filePath)添加了“try catch”子句,但我仍然得到一个未处理的异常,并且似乎从GC终结线程抛出异常(似乎GC尝试刷新磁盘没有的另外4096个字节)。我认为这是使用XMLDocument对象的常见场景,我想知道出了什么问题?
代码段:
XmlDocument query = new XmlDocument();
query.Load("g:\\test.xml");
... //modify the content of query to make it bigger
try
{
query.Save("g:\\test.xml");
}
catch(Exception ex)
{}
异常堆栈跟踪如下:
mscorlib.dll!System.IO .__ Error.WinIOError(int errorCode = 112,string maybeFullPath =“”)+ 0x498 bytes mscorlib.dll!System.IO.FileStream.WriteCore(byte [] buffer,int offset,int count)+ 0x119 bytes mscorlib.dll!System.IO.FileStream.FlushWrite(bool calledFromFinalizer)+ 0x22 bytes mscorlib.dll!System.IO.FileStream.Dispose(bool disposing = false)+ 0x57 bytes
mscorlib.dll!System.IO.FileStream.Finalize()+ 0x1b bytes
答案 0 :(得分:5)
嗯,问题是某些代码某处在使用它时没有处置FileStream
。当FileStream
完成时,它正在尝试刷新数据 - 此时抛出异常。
如果这真的是你的所有代码,它听起来就像它是XmlDocument.Save()
中的一个错误,它应该在返回之前关闭所有的流。您可以通过自己打开FileStream
(使用using
语句)并将流传递到XmlDocument.Save
来解决此问题。