2011-10-06 23 views
6

Tôi đang cố gắng có chương trình có thể hủy bản sao. Do đó, tôi không thể sử dụng Microsoft.VisualBasic.FileIO.FileSystem.CopyFile. Có một số trình bao bọc cho CopyFileEx trên web chẳng hạn như here. Tuy nhiên, tôi không thích sử dụng thứ gì đó mà tôi không hiểu, không muốn bất kỳ kết quả bất ngờ nào (hoặc lỗi). Có cách nào được quản lý để thực hiện việc này không? Hoặc có lẽ một wrapper bởi MS (trong một cái gì đó giống như Windows API CodePack)?Làm cách nào để sao chép tệp có khả năng hủy bản sao?

Cảm ơn.

+3

Tuy nhiên bạn làm điều đó, bạn có thể sẽ muốn sao chép vào một tập tin tạm thời, sau đó di chuyển các tập tin tạm thời đến đúng địa chỉ khi hoàn thành công việc sao chép . Bằng cách đó bạn sẽ không làm hỏng tệp đích (có khả năng tồn tại) khi bản sao bị hủy. – cHao

+2

Sao chép tập tin * đúng * rất khó. Sử dụng mã của Toub. –

Trả lời

3

Đọc tệp theo các đoạn nhỏ và viết nó ra đích. Định kỳ kiểm tra xem bạn đã được yêu cầu hủy hay chưa và nếu bạn phát hiện ra điều đó, hãy ngừng ghi và đóng các tệp.

+0

Xem [tại đây] (http://stackoverflow.com/questions/187768/can-i-show-file-copy-progress-using-fileinfo-copyto-in-net) trong câu trả lời của Coderer, ví dụ, mã của tôi sẽ không tận dụng lợi thế của DMA. – ispiro

+0

Nhưng cảm ơn. Được thăng hạng. – ispiro

+0

Sử dụng câu trả lời của Gasper sau đó ..? –

4

Bạn đã thử sao chép luồng theo từng phần và mỗi khi bạn kiểm tra đoạn kiểm tra nếu hủy đã được đặt hoặc mã thông báo hủy đã được đăng ký chưa?

Ví dụ bạn có thể làm một cái gì đó như:

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

hãy xem tại đây nếu bạn có thể thấy điều này ... http://stackoverflow.com/questions/15537214/copy-a-file-in-little-chunks – ElektroStudios

Các vấn đề liên quan