De la documentación de File.Move
:Mimic File.Move si el destino ya existe
Tenga en cuenta que si intenta reemplazar un archivo moviendo un archivo del mismo nombre en ese directorio, se obtiene una IOException. No puede usar el método Move para sobrescribir un archivo existente.
En resumen, no se puede sobrescribir en Move
, por lo que con el fin de facilitar el sobreescribiendo el movimiento que imitan el comportamiento haciendo una File.Copy
seguido de un File.Delete
. Algo así como:
if (File.Exists(dstFileName))
{
// System.IO.File.Move cannot be used to overwrite existing files, so we're going
// to simulate that behavior with a Copy & Delete.
File.Copy(procContext.FileName, dstFileName);
File.Delete(procContext.FileName);
}
else
File.Move(procContext.FileName, dstFileName);
Mi pregunta es: ¿Hay alguna situación que deben protegerse contra lo que podría llevar al archivo de origen que se eliminen sin que primero se copia con éxito?
Según tengo entendido, al leer la documentación, dado que File.Copy
no devuelve nada que arroje una excepción, en cualquier caso, no tiene éxito. ¿Alguien ha encontrado alguna situación en la que esto no sea cierto?
¿No sería más seguro que hacer una eliminación en el archivo de destino si existe, seguido de un movimiento como lo hiciste inicialmente? – Tudor
@Tudor - No necesariamente. Si el movimiento falla, el archivo de destino original también desaparecerá, lo que no es realmente el comportamiento esperado. –
Pero de su pregunta deduzco que si mover le permitió sobrescribir el archivo si existe, lo usaría, en lugar de copiar + eliminar. Entonces supongo que estás dispuesto a correr ese riesgo. – Tudor