不幸的是,MSDN沒有關於XDocument
和System.Xml.Linq命名空間拋出的異常的任何信息。
但這裏是儲蓄如何實現的:
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
。然後創建XmlWriter
,其中涉及FileStream
創建。在這裏,你可以捕捉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
和記錄它,通知用戶等