我正在使用C#(.NET Web Service)创建一个文件,并且不想覆盖现有文件。
似乎是构建一个FileMode.CreateNew设置的FileStream。事实上,如果文件存在,它会抛出异常。
但是,如何识别此异常,而不是文件创建引发的其他可能异常? http://msdn.microsoft.com/en-us/library/47ek66wy.aspx处的文档将此案例列为“IOException”,这显然是模糊的,因为其他事情可能会导致这种情况。
这里的答案是我捕获IOException然后只做一个File.Exists吗?
答案 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的注释或描述。