¿Puedo mostrar el progreso de la copia de archivos usando FileInfo.CopyTo () en .NET?

He creado una utilidad de copia en c # (Framework .NET 2.0) que copia archivos, directorios y subdirectorios recursivos, etc. El programa tiene una GUI que muestra el archivo actual que se está copiando, el número de archivo actual (secuencia), el número total de archivos a copiar y el porcentaje completado para las operaciones de copia. También hay una barra de progreso, que se basa en el archivo actual / archivos totales.

Mi problema está relacionado con la copia de archivos grandes. No he podido encontrar una manera de indicar el progreso total de la copia de un archivo grande (usando mi estructura de clase actual que utiliza el método FileInfo.CopyTo). Como solución alternativa, he separado las operaciones de copia de archivos y la pantalla GUI en sus propios hilos y configuré una señal visual para mostrar que se está trabajando. Al menos el usuario es consciente de que el programa no está congelado y todavía está copiando archivos.

Sería mejor poder mostrar el progreso en función del número total de bytes o tener algún tipo de evento que se dispare desde el método FileInfo.CopyTo que indica el número total de bytes copiados del archivo actual.

Soy consciente de la propiedad FileInfo.Length, por lo que estoy seguro de que hay una manera en la que MacGuyver realiza mi propio evento basado en esto y tiene un controlador en el lado de la GUI de las cosas que lee las actualizaciones (tal vez en función de la verificación de FileInfo. ¿Propiedad de longitud del objeto de destino usando algún tipo de temporizador?).

¿Alguien sabe de una manera de hacer esto que estoy pasando por alto? Si puedo evitarlo, prefiero no volver a escribir mi clase para copiar bytes a través de una secuencia y rastrearla de esa manera (aunque estoy pensando que podría estar estancado en seguir esa ruta).

Gracias por adelantado

PS: estoy atascado con el marco .NET 2.0 por ahora, por lo que cualquier solución que requiera funciones disponibles en> = 3.0 solo no es una opción para mí.

PPS: estoy abierto a soluciones en cualquier variedad de lenguaje .NET, no solo c #.

Respuestas a la pregunta(7)

Su respuesta a la pregunta