2011-10-06 11 views
6

मैं प्रोग्राम प्रतिलिपि को रद्द करने में सक्षम होने का प्रयास कर रहा हूं। इसलिए मैं Microsoft.VisualBasic.FileIO.FileSystem.CopyFile का उपयोग नहीं कर सकता। here जैसे वेब पर CopyFileEx के लिए कुछ रैपर हैं। हालांकि, मैं कुछ ऐसा नहीं उपयोग करता जिसे मैं समझ नहीं पा रहा हूं, किसी भी अप्रत्याशित परिणाम (या बग) नहीं चाहता। क्या ऐसा करने का कोई प्रबंधित तरीका है? या शायद एमएस द्वारा एक रैपर (विंडोज एपीआई कोडपैक की तरह कुछ में)?प्रतिलिपि को रद्द करने की क्षमता वाले फ़ाइल की प्रतिलिपि कैसे करें?

धन्यवाद।

+3

हालांकि आप इसे, तो आप शायद, एक अस्थायी फ़ाइल के लिए कॉपी तो एक बार सही जगह पर अस्थायी फ़ाइल ले जाना चाहते करने जा रहे हैं करने के प्रति ने किया । इस तरह कॉपी की रद्द होने पर आप (संभावित रूप से मौजूदा) गंतव्य फ़ाइल को मिटा नहीं पाएंगे। – cHao

+2

फ़ाइल की प्रतिलिपि * सही * हास्यास्पद रूप से मुश्किल है। टब के कोड का प्रयोग करें। –

उत्तर

3

फ़ाइल को छोटे हिस्सों में पढ़ें और इसे गंतव्य पर लिखें। समय-समय पर जांच करें कि क्या आपको रद्द करने के लिए कहा गया है और यदि आप इसका पता लगाते हैं, तो फ़ाइलों को लिखना बंद करें और बंद करें।

+0

यहां देखें [http://stackoverflow.com/questions/187768/can-i-show-file-copy-progress-using-fileinfo-copyto-in-net) कोडर के उत्तर में, उदाहरण के लिए, मेरा कोड डीएमए का लाभ नहीं उठाएगा। – ispiro

+0

लेकिन धन्यवाद। Upvoted। – ispiro

+0

तब गैपर के जवाब का उपयोग करें ..? –

4

क्या आपने धाराओं में स्ट्रीम की प्रतिलिपि बनाने की कोशिश की है और जब भी कोई रद्द किया गया था, तो रद्दी जांच की जांच की जाती है, या रद्दीकरण टोकन पंजीकृत किया गया था?

उदाहरण के लिए आप की तरह कुछ कर सकता है:

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

अगर आप इसे देख सकते हैं तो कृपया यहां एक नज़र डालें ... http://stackoverflow.com/questions/15537214/copy-a-file-in-little-chunks – ElektroStudios

संबंधित मुद्दे