4

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

方法似乎是用 FileMode.CreateNew 构造一个 FileStream 集。如果文件存在,它实际上会抛出异常。

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

这里的答案是我捕获 IOException 然后只执行 File.Exists 吗?

4

4 回答 4

5

您可以从异常中获取错误代码,如下所示:

int hr = Marshal.GetHRForException( ex );

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

于 2012-02-10T00:35:02.950 回答
0

我会推荐另一种方式:首先执行 File.Exist,然后捕获异常。这样,您就可以确定文件已经存在这一事实不会引发异常。

于 2012-02-09T23:32:42.707 回答
0

我认为 File.Exists 方法是最优雅的。您可以通过反思来尝试猜测根本原因,但这不值得。InnerException 可能被设置为更独特的东西。它是空的吗?

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

老实说,我最喜欢你的想法。

于 2012-02-09T23:33:28.980 回答
0

我相信,最好的方法是File.Exists在尝试创建 FileStream 之前使用 a。例子:

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 的评论或描述。

于 2012-02-09T23:35:20.860 回答