在我的C#应用程序中,我使用以下语句:
public void Write(XDocument outputXml, string outputFilename) {
outputXml.Save(outputFilename);
}
如何找出Save
方法可能抛出的异常?最好是在Visual Studio 2012中,或者在MSDN文档中。
XDocument.Save没有提供任何参考。它适用于其他方法,例如File.IO.Open
。
答案 0 :(得分:6)
不幸的是,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
并记录它,通知用户等
答案 1 :(得分:1)
如果MSDN没有声明任何我猜这个类不会抛出任何异常。虽然,我不认为这个对象会负责将实际文件写入磁盘。因此,您可能会收到XDocument.Save();
为了安全起见,我会捕获所有异常并尝试一些明显不稳定的指令,请参阅下文。
try
{
outputXml.Save("Z:\\path_that_dont_exist\\filename");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
在这里,捕获Exception将捕获任何类型的异常。