Tenemos un método MoveFile que generalmente funciona, pero sigue fallando en el sitio de un cliente.File.Move falla cuando está precedido por un archivo. Eliminar
if (File.Exists(target))
{
File.Delete(target);
}
File.Move(source, target);
La llamada a File.Move
falla repetidamente con
System.IO.IOException: Cannot create a file when that file already exists. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.IO.File.Move(String sourceFileName, String destFileName)
Tenemos el control de errores que rodea llamada a ese método, pero no podemos entender por qué File.Delete
no está funcionando y no es tirando cualquier cosa
Pensamos en el permiso de archivo, pero el File.Delete
habría arrojado un UnauthorizedAccessException
.
¿Hay alguna otra razón que haría que File.Move
fallara con un "archivo ya existente" cuando va precedido por la eliminación de ese archivo específico?
Curioso: ¿qué sucede si ajusta su File.Move en un if similar (File.Exists (..))? – razlebe
Una posible razón por la que Move to fail after Delete es que aún se puede abrir el manejador de archivo en algún proceso del sistema, por ejemplo, el antivirus o los indexadores de búsqueda. Como la sección de comentarios de File.Delete indica claramente que "Nota de plataforma de Windows NT 4.0: Delete no elimina un archivo abierto para E/S normal o un archivo mapeado en memoria", en su lugar solo marca como Eliminar y otras llamadas dan acceso denegado excepción. – kiran