2011-10-06 2 views
6

J'essaie d'avoir le programme être capable d'annuler la copie. Par conséquent, je ne peux pas utiliser Microsoft.VisualBasic.FileIO.FileSystem.CopyFile. Il existe des enveloppes pour CopyFileEx sur le Web telles que here. Cependant, je préfère ne pas utiliser quelque chose que je ne comprends pas, ne voulant pas de résultats inattendus (ou bugs). Y a-t-il un moyen géré de le faire? Ou peut-être un wrapper par MS (dans quelque chose comme Windows API CodePack)?Comment copier un fichier avec la possibilité d'annuler la copie?

Merci.

+3

Cependant vous le faites, vous allez probablement vouloir copier dans un fichier temporaire, puis déplacez le fichier temporaire au bon endroit une fois fait de la copie . De cette façon, vous ne supprimerez pas le fichier de destination (potentiellement existant) lorsque la copie est annulée. – cHao

+2

Copier un fichier * correctement * est ridiculement difficile. Utilisez le code de Toub. –

Répondre

3

Lisez le fichier en petits morceaux et écrivez-le à la destination. Vérifiez périodiquement si vous avez été invité à annuler et, si vous le détectez, arrêtez d'écrire et fermez les fichiers.

+0

Voir [ici] (http://stackoverflow.com/questions/187768/can-i-show-file-copy-progress-using-fileinfo-copyto-in-net) dans la réponse de Coderer que, par exemple, mon code ne profiterait pas de DMA. – ispiro

+0

Mais merci. Upvoted. – ispiro

+0

Utilisez la réponse de Gasper puis ..? –

4

Avez-vous essayé de copier le flux en segments et chaque fois que vous vérifiez la vérification de bloc si une annulation a été définie ou qu'un jeton d'annulation a été enregistré?

Par exemple, vous pouvez faire quelque chose comme:

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

s'il vous plaît jeter un oeil ici si vous pouvez voir cela ... http://stackoverflow.com/questions/15537214/copy-a-file-in-little-chunks – ElektroStudios

Questions connexes