2010-02-08 14 views
11

Estoy compilando una aplicación de servidor que copia archivos utilizando la función System.IO.File.Copy (...). Mis archivos pueden ser bastante grandes, por lo tanto, existe una buena probabilidad de que si la máquina falla, ocurra durante la copia.Copia de archivo atómico en .NET

Después de reiniciar el servicio, debería poder retomar las tareas de copia y continuar. ¿Cómo puedo detectar si una copia se ha completado o interrumpido con éxito debido a un bloqueo del servidor?

Mi plan actual es copiar los archivos a un nombre temporal y una vez que haya copiado, renombrarlo con el nombre final. De esta forma, el nombre del archivo puede llevar la información del estado a lo largo del bloqueo.

¿Tiene alguna buena/mejor sugerencia?

EDIT: SO destino es Win2003, por lo tanto, NTFS transaccionales no está disponible

+0

Ver también: http://stackoverflow.com/questions/15274861/file-move-atomic -operación –

Respuesta

10

Otros han sugerido NTFS transaccional, que está bien si está implementando en Vista o posterior. Si necesita admitir XP (o antes), entonces el archivo temporal seguido de un movimiento (cambiar el nombre) es la mejor solución.

La respuesta a esta pregunta similar proporciona más información: Atomicity of File.Move

Cuestiones relacionadas