C#for FileStream构造函数抛出异常,CreateNew用于现有文件

时间:2012-02-09 23:26:32

标签: c# exception ioexception file-exists

我正在使用C#(.NET Web Service)创建一个文件,并且不想覆盖现有文件。

似乎是构建一个FileMode.CreateNew设置的FileStream。事实上,如果文件存在,它会抛出异常。

但是,如何识别此异常,而不是文件创建引发的其他可能异常? http://msdn.microsoft.com/en-us/library/47ek66wy.aspx处的文档将此案例列为“IOException”,这显然是模糊的,因为其他事情可能会导致这种情况。

这里的答案是我捕获IOException然后只做一个File.Exists吗?

4 个答案:

答案 0 :(得分:5)

您可以通过以下方式从异常中获取错误代码:

int hr = Marshal.GetHRForException( ex );

对于存在的文件,它将是0x80070050。

答案 1 :(得分:0)

我建议反过来:首先执行File.Exist,然后捕获异常。这样,您就可以确保文件已经存在,而不会引发异常。

答案 2 :(得分:0)

我认为File.Exists方法是最优雅的。你可以玩反射来尝试猜测根本原因,但这不值得。 InnerException可能设置为更明显的东西。它是空的吗?

Message属性应该描述(用英语或你正在使用的任何语言)究竟发生了什么。依赖Message返回的字符串也不是一个好主意。

我最喜欢你的想法。

答案 3 :(得分:0)

我认为最好的方法是在尝试创建FileStream之前使用File.Exists。例如:

if (File.Exists(path))
{
   //Handle existing file
}
else
{
   FileStream newFile = new FileStream(path, FileMode.CreateNew);
   //Logic to do with your new file
}

尝试解析IOException以确保它完全是'正确'的IOException是脆弱的。我相信唯一的方法是比较IOException的注释或描述。