En C#, System.IO.File.Delete (filePath) eliminará el archivo especificado o generará una excepción. Si el usuario actual no tiene permiso para eliminar el archivo, generará una excepción de acceso no autorizado.¿Cómo puedo comprobar si File.Delete() tendrá éxito sin intentarlo, en C#?
¿Hay alguna manera de que yo puedo decir de antemano si la eliminación es probable que lanzar una UnauthorizedAccessException o no (es decir, consultar la ACL para ver si la identidad del subproceso actual tiene permiso para borrar el archivo especificado?)
básicamente estoy buscando hacer:
if (FileIsDeletableByCurrentUser(filePath)) {
/* remove supporting database records, etc. here */
File.Delete(filePath);
}
pero no tengo ni idea de cómo poner en práctica FileIsDeletableByCurrentUser().
Es bastante difícil manejar las condiciones de carrera. ¿Qué sucede si el archivo "era" eliminable en el momento en que está evaluando 'FileIsDeletableByCurrentUser' pero justo después de él, algún otro proceso bloquea el archivo? –
Tampoco puede eliminar el archivo si lo abre otro proceso (como, por ejemplo, IIS u oficina). Puede ser la misma excepción pero no se puede decir simplemente mirando los permisos. – ryber
¿Está seguro de que el solo hecho de utilizar un try/catch para las excepciones específicas no es la forma correcta de manejar esto? Parece que estás intentando reinventar la rueda aquí. – StingyJack