2010-09-03 20 views
5

Tengo un hilo que sondea una carpeta para nuevos archivos. El problema es que ve un archivo nuevo y comienza a trabajar en él incluso antes de que el archivo haya sido completamente copiado por otro proceso. Debido a esto, el sondeador obtiene el archivo utilizado por otro error de proceso.¿Cómo esperar a que se copie por completo un archivo?

¿Hay alguna manera de comprobar si el archivo es libre de usar o recibir notificaciones? Ciertamente podemos usar el código de manejo de excepciones, pero ¿hay una mejor manera?

Tech: 2.0 de .NET/C#

Actualización:

  • Enterado de otras respuestas que si tenemos acceso a la aplicación de escribir el archivo a continuación, un mejor diseño es comenzar con alguna otra extensión .tmp y luego cambiarle el nombre después de copiar.

  • El FileStream.Lock se podría utilizar si no controlamos la aplicación de origen

+2

Ver http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complete-in-java-1-6/750521#750521 para algunas respuestas generales. Puede haber algo mejor para una plataforma específica (es decir, Windows .NET), pero la respuesta mencionada anteriormente tiene dos soluciones generales al problema. – paxdiablo

Respuesta

2

Tratamos de obtener un bloqueo en el archivo antes de procesar y manejar el IOException en lugar de una excepción genérica durante el intento de leer el archivo.

Consulte FileStream.Lock en MSDN.

+0

Gracias. Esto suena como una mejor idea. – thewpfguy

Cuestiones relacionadas