Al tratar de responder this question, me sorprendí al descubrir que intentar crear un nuevo archivo cuando ese archivo ya existe no arroja un tipo de excepción única, simplemente arroja un genérico IOException
.Excepción códigos, o detección de un "archivo ya existe" tipo excepción
Por lo tanto, me pregunto cómo determinar si el IOException
es el resultado de un archivo existente, o algún otro error de IO.
La excepción tiene HResult, pero esta propiedad está protegida y, por lo tanto, no está disponible para mí.
La única otra forma en que puedo ver es hacer coincidir el patrón con la cadena del mensaje, lo que se siente horrible.
ejemplo:
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?
}
¿Por qué no acaba de comprobar para ver si existe el archivo? BESO. –
Porque un sistema de archivos es inherentemente inestable. Los archivos se pueden crear en cualquier momento (no solo yo). – GazTheDestroyer
Combinar errores múltiples en una excepción sin posibilidad de diferenciarlos es probablemente la peor característica del diseño de .NET framework. Tiene el mismo problema con el disco lleno, la ruta de red no encontrada, etc. IOExcepciones. Incluso si llega al código HResult, si su código también debe ejecutarse bajo Mono en Linux, eso no es compatible – jimvfr