2012-01-29 15 views
5

के साथ मर्ज करें मेरे पास एक ऑटोपॉटर सी # प्रोग्राम है। यह एक रार फ़ाइल डाउनलोड करेगा जिसमें कुछ सॉफ़्टवेयर के अपडेट के लिए बदली या नई फाइलें होंगी। रार फ़ाइल में यह सॉफ़्टवेयर की मूल निर्देशिका की तरह ही संरचना है लेकिन इसमें केवल बदली गई या नई फ़ाइलें/फ़ोल्डर्स हैं। क्या इन फ़ाइलों/फ़ोल्डरों को गंतव्य निर्देशिका में "विलय" करने का कोई आसान तरीका है, इसलिए यदि फ़ाइल/फ़ोल्डर पहले से मौजूद है तो इसे प्रतिस्थापित कर दिया जाएगा और यदि नहीं, तो इसे जोड़ा जाएगा या नहीं, मुझे प्रत्येक फ़ाइल के माध्यम से मैन्युअल रूप से चलना होगा/फ़ोल्डर और यह खुद करो? बस वहाँ उम्मीद कर एक अच्छी छोटी मर्ज समारोह नेट है :)सी # एक निर्देशिका को

उत्तर

19

DirectoryInfo Class

निम्न उदाहरण दर्शाता है कि कैसे एक निर्देशिका और उसकी सामग्री की प्रतिलिपि करने के लिए है।

public static void CopyAll(DirectoryInfo source, DirectoryInfo target) 
{ 
    if (source.FullName.ToLower() == target.FullName.ToLower()) 
    { 
     return; 
    } 

    // Check if the target directory exists, if not, create it. 
    if (Directory.Exists(target.FullName) == false) 
    { 
     Directory.CreateDirectory(target.FullName); 
    } 

    // Copy each file into it's new directory. 
    foreach (FileInfo fi in source.GetFiles()) 
    { 
     Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name); 
     fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
    } 

    // Copy each subdirectory using recursion. 
    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) 
    { 
     DirectoryInfo nextTargetSubDir = 
      target.CreateSubdirectory(diSourceSubDir.Name); 
     CopyAll(diSourceSubDir, nextTargetSubDir); 
    } 
} 
+0

सोच क्यों अपनी पोस्ट मेरे लिए नहीं दिखाया गया है जब मैं एक अपने आप को लिखना ?? –

+1

@ फ़ेलिक्सके। मैंने एक उत्तर पोस्ट किया, फिर मैंने सोचा कि यह सही नहीं था, इसे हटा दिया गया था, इसे हटाए जाने के बाद संपादित किया गया था और हटाया गया था। स्पष्ट रूप से एक आम अभ्यास। – GSerg

+0

अरे, धन्यवाद दोस्त –

1

सबसे आसान तरीका FileSystem.MoveDirectory विधि का उपयोग करने के लिए है। सुनिश्चित करें कि आप Microsoft.VisualBasic.dll के लिए एक संदर्भ जोड़ने बनाओ:

using Microsoft.VisualBasic.FileIO; 
... 
// Merge D:\SourceDir with D:\DestDir: 
FileSystem.MoveDirectory("D:\\SourceDir", "D:\\DestDir", true /* Overwrite */); 
+0

प्रश्न निर्देशिका निर्देशिका के साथ स्रोत निर्देशिका को मर्ज करना है, इस मामले में MoveDirectory कार्य करेगा? मेरा मानना ​​है कि MoveDirectory गंतव्य पर एक नई निर्देशिका बनाने के लिए जाता है और यदि कोई निर्देशिका पहले से मौजूद है तो "कोई फ़ाइल पहले से मौजूद होने पर फ़ाइल नहीं बना सकती" त्रुटि उत्पन्न करेगी। – kaushalparik27

+1

विश्वास क्यों करें यदि आप कोशिश कर सकते हैं? यह निर्देशिकाओं को मर्ज करेगा, इसलिए आप एक ही DestDir के साथ संयुक्त सभी सामग्री के साथ समाप्त हो जाएगा। – Yarik

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