我开发了一个简单的应用程序,当我尝试将 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 字节
mscorlib.dll!System.IO.FileStream.WriteCore(byte[] 缓冲区, int 偏移量, int 计数) + 0x119 字节
mscorlib.dll!System.IO.FileStream.FlushWrite(bool calledFromFinalizer) + 0x22 字节
mscorlib.dll!System.IO.FileStream.Dispose(bool dispose = false) + 0x57 字节
mscorlib.dll!System.IO.FileStream.Finalize() + 0x1b 字节
好吧,问题是有些代码某处没有处置FileStream
当它完成时。当。。。的时候FileStream
完成后,它正在尝试刷新数据 - 此时抛出异常。
如果这确实是您的全部代码,那么它sounds就像它是一个错误XmlDocument.Save()
,它肯定应该在返回之前关闭所有流。您可以通过打开FileStream
你自己(与using
语句)并将流传递给XmlDocument.Save
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)