2011-10-06 6 views
6

Estoy intentando que el programa pueda cancelar la copia. Por lo tanto, no puedo usar Microsoft.VisualBasic.FileIO.FileSystem.CopyFile. Hay algunos contenedores para CopyFileEx en la web, como here. Sin embargo, prefiero no utilizar algo que no entiendo, que no quiera resultados inesperados (o errores). ¿Hay una manera administrada de hacer esto? O tal vez un contenedor de MS (en algo como Windows API CodePack)?¿Cómo copiar un archivo con la capacidad de cancelar la copia?

Gracias.

+3

Sin embargo usted lo hace, usted está probablemente va a querer copiar a un archivo temporal, a continuación, mover el archivo temporal en el lugar adecuado una vez que ha hecho la copia . De esa forma no va a trash el archivo de destino (potencialmente existente) cuando se cancela la copia. – cHao

+2

Copiar un archivo * correctamente * es ridículamente difícil. Usa el código de Toub. –

Respuesta

3

Lea el archivo en trozos pequeños y escríbalo en el destino. Compruebe periódicamente si se le ha pedido que cancele y, si lo detecta, deje de escribir y cierre los archivos.

+0

Ver [aquí] (http://stackoverflow.com/questions/187768/can-i-show-file-copy-progress-using-fileinfo-copyto-in-net) en la respuesta de Coderer que, por ejemplo, mi código no tomaría ventaja de DMA. – ispiro

+0

Pero gracias. Upvoted. – ispiro

+0

¿Usa la respuesta de Gasper entonces ...? –

4

¿Ha intentado copiar la secuencia en fragmentos y cada vez que revisa el fragmento compruebe si se ha configurado una cancelación o se ha registrado un token de cancelación?

Por ejemplo, usted podría hacer algo como:

void CopyStream(Stream inputStream, Stream outputStream) 
    { 
     var buffer = new byte[1024]; 

     int bytesRead; 
     while((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      outputStream.Write(buffer, 0, bytesRead); 
      if(cancelled){ 
       // cleanup 

       return; 
      } 
     } 
    } 
+0

Mire aquí si puede ver esto ... http://stackoverflow.com/questions/15537214/copy-a-file-in-little-chunks – ElektroStudios

Cuestiones relacionadas