在试图回答this question时,我惊讶地发现当该文件已存在时尝试创建新文件不会抛出唯一的异常类型,它只会抛出通用的IOException
。异常代码或检测到“文件已存在”类型异常
因此我想知道如何确定IOException
是现有文件的结果还是其他一些IO错误。
异常有一个HResult,但此属性是受保护的,因此对我无效。
我能看到的唯一的另一种方式是模式匹配消息字符串,感觉很糟糕。
例如:
try
{
using (var stream = new FileStream("C:\\Test.txt", FileMode.CreateNew))
using (var writer = new StreamWriter(stream))
{
//write file
}
}
catch (IOException e)
{
//how do I know this is because a file exists?
}
为什么你不只是检查,看看文件是否存在?吻。 –
由于文件系统固有地不稳定。文件可以随时创建(不仅仅是我)。 – GazTheDestroyer
将多个错误集成为一个异常,无法区分它们可能是.NET框架设计的最糟糕的特性。您在磁盘已满,未找到网络路径等方面存在相同的问题。IOException。即使您获得HResult代码,如果您的代码也需要在Linux上的Mono下运行,那么不支持 – jimvfr