2011-07-14 26 views
15

Voy a copiar un archivo grande en la red con mi aplicación de winforms y necesito mostrar algún tipo de barra de progreso. En lugar de preparar mi propia rutina de copia, pensé que sería mejor simplemente mostrar el diálogo de copiado de archivo incorporado.¿Cómo abrir el cuadro de diálogo integrado de Copiar archivo?

También necesitaría una notificación de "Copia completa" y "Copia fallida".

Necesito esto para trabajar en Windows XP, Vista y 7. ¿Hay alguna manera de llamar para activar esta funcionalidad desde mi código C#?

+0

posible duplicado de [¿Cómo invoco el cuadro de diálogo de copia de archivo del shell? Para informar el progreso de una copia en Win32?] (http://stackoverflow.com/questions/5729808/how-do-i-invoke-the-shell-file-copy-dialog-to-report-the-progress-of-a- copia-en) –

+0

mejor use 'xcopy' o' robocopy' en su lugar. Posible duplicado http://stackoverflow.com/q/3124038/380384 – ja72

+0

No sé si el marco tiene soporte para esto, puede que tenga que p/invocar el [SHFileOperation()] (http://msdn.microsoft) .com/en-us/library/bb762164.aspx) función. –

Respuesta

17

respuesta tomado de: http://msdn.microsoft.com/en-us/magazine/cc163304.aspx

Windows Vista en efecto, incluye un nuevo motor de copia que soporta exactamente lo que está buscando hacer. Sin embargo, es posible que la funcionalidad previamente existente pueda satisfacer sus necesidades. Por ejemplo, si desea copiar, mover, cambiar el nombre o eliminar un archivo o directorio individual, puede aprovechar SHFileOperation (expuesto desde shell32.dll), que ya está incluido en el tiempo de ejecución de Visual Basic®. Si está utilizando Visual Basic 2005, puede simplemente usar la funcionalidad del espacio de nombres My, por ejemplo:

My.Computer.FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs) 

lograr el mismo objetivo en C# implica sólo un poco más de trabajo, añadir una referencia a Microsoft.VisualBasic. DLL (desde el directorio de instalación de Microsoft® .NET Framework) y utilizando un código como el siguiente:

using Microsoft.VisualBasic.FileIO; 
... 
FileSystem.CopyDirectory(
    sourcePath, destinationPath, UIOption.AllDialogs); 

Cuando se ejecuta, esto se traducirá en la misma interfaz de usuario de los avances que verías si fueras a hacer las mismas operaciones de archivo desde el Explorador de Windows. De hecho, cuando se ejecuta en Windows Vista, obtiene automáticamente la nueva interfaz de usuario de Windows Vista, como se muestra en la Figura 1. Dialog

+2

Al citar una fuente, cite la fuente entre comillas. Las respuestas que simplemente citan algo más sin ningún contexto o explicación adicional generalmente son desaprobadas. –

+0

Mayormente se cita, pero no literalmente. Algunas ediciones para la brevedad fueron hechas así que decidí no blockquote. Edité la publicación recientemente, hará que la comunidad sea más feliz. – ja72

+0

Necesito escribir una copia de seguridad y restaurar una utilidad que muestre el cuadro de diálogo de progreso de la GUI que proporcionó en su respuesta, pero prefiero un exe compilado que no requiera un tiempo de ejecución o un marco. ¿Se puede lograr esto con win32 C++ (visual-C++)? .. Si es verdadero, el problema es que no sé cómo escribirlo en visual-C++ –

Cuestiones relacionadas