保存 XDocument 时可能发生哪些异常
本文关键字:异常 可能发生 XDocument 保存 | 更新日期: 2023-09-27 18:19:07
在我的 C# 应用程序中,我使用以下语句:
public void Write(XDocument outputXml, string outputFilename) {
outputXml.Save(outputFilename);
}
如何找出 Save
方法可能引发的异常?最好是在 Visual Studio 2012 中,或者在 MSDN 文档中
XDocument.Save 不提供任何引用。它适用于其他方法,例如 File.IO.Open
.
不幸的是,
MSDN 没有任何关于 System.Xml.Linq 命名空间中由 XDocument
和许多其他类型引发的异常的信息。
但以下是保存的实施方式:
public void Save(string fileName, SaveOptions options)
{
XmlWriterSettings xmlWriterSettings = XNode.GetXmlWriterSettings(options);
if ((declaration != null) && !string.IsNullOrEmpty(declaration.Encoding))
{
try
{
xmlWriterSettings.Encoding =
Encoding.GetEncoding(declaration.Encoding);
}
catch (ArgumentException)
{
}
}
using (XmlWriter writer = XmlWriter.Create(fileName, xmlWriterSettings))
Save(writer);
}
如果你深入挖掘,你会发现有大量可能的异常。 例如 XmlWriter.Create
方法可以抛出ArgumentNullException
。然后它创建涉及FileStream
创造的XmlWriter
。在这里你可以捕捉到ArgumentException
、NotSupportedException
、DirectoryNotFoundException
、SecurityException
、PathTooLongException
等。
所以,我认为你不应该试图抓住所有这些东西。考虑将任何异常包装在特定于应用程序的异常中,并将其抛到应用程序的更高级别:
public void Write(XDocument outputXml, string outputFilename)
{
try
{
outputXml.Save(outputFilename);
}
catch(Exception e)
{
throw new ReportCreationException(e); // your exception type here
}
}
调用代码只能捕获ReportCreationException
并记录它,通知用户等。
如果 MSDN 没有声明任何内容,我想该类不会引发任何异常。虽然,我认为这个对象不会负责将实际文件写入磁盘。因此,您可能会收到来自XDocument.Save();
使用的其他类的异常
我会捕获所有异常并尝试一些明显的不稳定说明,请参见下文。
try
{
outputXml.Save("Z:''path_that_dont_exist''filename");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
在这里,捕获异常将捕获任何类型的异常。