我正在尝试将 XDcoument 保存到没有足够可用内存空间的拇指驱动器。 (这是应用程序的特殊测试条件)虽然应用程序给出了如下所示的异常,但我无法在 XDocument.Save(filePath) 周围的 try catch 块中得到该异常。看起来是延迟投掷。这是 LINQ 问题还是我做错了什么?
替代文本 http://img211.imageshack.us/img211/8324/exce.png http://img211.imageshack.us/img211/8324/exce.png
System.IO.IOException was unhandled
Message="There is not enough space on the disk.\r\n"
Source="mscorlib"
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
at System.IO.FileStream.Dispose(Boolean disposing)
at System.IO.FileStream.Finalize()
您在框架中发现了一个错误。 XDocument.Save(string) 使用“using”语句来确保输出流被释放。它取决于您在处理指令中使用的编码,但内部 System.Xml.XmlUtf8RawTextReader 将是实现文本编写器的常用编码。
bug:编写该类的 Microsoft 程序员忘记实现 Dispose() 方法。仅实现了 Close() 方法。
相当奇怪的是,connect.microsoft.com 反馈站点尚未报告此错误。它应该在一般使用中引起麻烦,因为文件在终结器线程运行之前保持打开状态。虽然这通常不会花那么长时间,几秒钟左右。除非您在写入后立即退出程序,并且不幸在缓冲区刷新时耗尽磁盘空间。
此错误的解决方法是改用 XDocument.Save(TextWriter) 重载,传递其编码与 XML 编码相匹配的 StreamWriter。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)