2013-08-09 5 views
5

मैं SevenZipCompressor का उपयोग कर 3 फ़ोल्डरों को एक फ़ाइल में संपीड़ित करना चाहता हूं। मुझे पता है कि एक फ़ोल्डर को कैसे कंप्रेस करना है। ऐसी चीज संभव है ??SevenZipSharp - सी # का उपयोग कर एक ही फाइल में एकाधिक निर्देशिकाओं को कैसे संपीड़ित करें?

धन्यवाद!

उत्तर

5

SevenZipCompressor कक्षा CompressFileDictionary() नामक एक विधि प्रदान करती है। विधि ओवरलोड में से एक फ़ाइल शब्दकोश और फ़ाइल स्ट्रीम की अपेक्षा करता है। फ़ाइल शब्दकोश एक साधारण .NET Dictionary<string,string> है। शब्दकोश की कुंजी संग्रह में फ़ाइल का नाम (या सापेक्ष पथ) है, शब्दकोश का मूल्य फ़ाइल सिस्टम में फ़ाइल का पथ है।

शब्दकोश की कुंजी आपको 7z संग्रह में संरचना को नियंत्रित करने की अनुमति देती है। उदाहरण के लिए आप होना चाहिए तीन फ़ोल्डरों

c:\temp\testdir1 
      |- file1.txt 
      |- file2.txt 
c:\temp\testdir2 
      |- file1.txt 
c:\temp2\test 
      |- file3.txt 

और संग्रह में जिसके परिणामस्वरूप संरचना सेक करना चाहते हैं

testdir1 
     |- file1.txt 
     |- file2.txt 
testdir2 
     |- file1.txt 
    test 
     |-file3.txt 

तो बस निम्नलिखित तरीके से Dictonary में फ़ाइलें जोड़ने:

Dictionary<string, string> filesDic = new Dictionary<string, string>(); 

filesDic.Add(@"testdir1\file1.txt", @"c:\temp\testdir1\files1.txt"); 
filesDic.Add(@"testdir1\file2.txt", @"c:\temp\testdir1\files2.txt"); 
filesDic.Add(@"testdir2\file1.txt", @"c:\temp\testdir2\files1.txt"); 
filesDic.Add(@"test\file3.txt", @"c:\temp2\test\files3.txt"); 

नीचे दिया गया उदाहरण दिखाता है कि फ़ोल्डर्स के लिए इस तरह के एक शब्दकोश को बनाने और इसे संपीड़ित करने की प्रक्रिया को स्वचालित करने के तरीके को कैसे दिखाया जाए एक 7z संग्रह फ़ाइल।

private static void AddFilesFromDirectoryToDictionary(Dictionary<string, string> filesDictionary, 
    string pathToDirectory) 
{  
    DirectoryInfo dirInfo = new DirectoryInfo(pathToDirectory);  

    FileInfo[] fileInfos = dirInfo.GetFiles("*.*", SearchOption.AllDirectories); 

    foreach (FileInfo fi in fileInfos) 
    {   
    filesDictionary.Add(fi.FullName.Replace(dirInfo.Parent.FullName + "\\", "").ToLower(), 
     fi.FullName); 
    }   
} 

static void Main(string[] args) 
{ 
    // Set path to 7z library. 
    SevenZipCompressor.SetLibraryPath("7z.dll"); 

    using (FileStream fs = new FileStream("c:\\temp\\test.7z", FileMode.Create)) 
    {   
    SevenZipCompressor szc = new SevenZipCompressor 
           { 
            CompressionMethod = CompressionMethod.Lzma, 
            CompressionLevel = CompressionLevel.Normal, 
            CompressionMode = CompressionMode.Create,          
            DirectoryStructure = true, 
            PreserveDirectoryRoot = false, 
            ArchiveFormat = OutArchiveFormat.SevenZip 
           };   

    Dictionary<string, string> filesDictionary = new Dictionary<string, string>(); 

    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp\testdir1"); 
    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp\testdir2"); 
    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp2\test"); 

    szc.CompressFileDictionary(filesDictionary, fs);        
    }  
} 

आप निम्न कोड में परिवर्तन का उपयोग कर एक ज़िप-संग्रह बना सकते हैं:

using (FileStream fs = new FileStream("c:\\temp\\test.zip", FileMode.Create)) 
{   
    SevenZipCompressor szc = new SevenZipCompressor 
      { 
      CompressionMethod = CompressionMethod.Deflate, 
      CompressionLevel = CompressionLevel.Normal, 
      CompressionMode = CompressionMode.Create,          
      DirectoryStructure = true, 
      PreserveDirectoryRoot = false, 
      ArchiveFormat = OutArchiveFormat.Zip 
      };   

    Dictionary<string, string> filesDictionary = new Dictionary<string, string>(); 

    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp\testdir1"); 
    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp\testdir2"); 
    AddFilesFromDirectoryToDictionary(filesDictionary, @"c:\temp2\test"); 

    szc.CompressFileDictionary(filesDictionary, fs);        
} 
+0

@subirshan: मेरा उत्तर मदद करता है? – Hans

+0

ऐसा लगता है कि यह केवल .7z फ़ाइलों के लिए काम करता है, न कि .zip फ़ाइलें? क्या ये सही है? –

+1

@ मार्कर्कडमैन: आप एक .zip संग्रह भी बना सकते हैं। मैंने .zip संग्रह बनाने का तरीका दिखाने के लिए अपना उत्तर अपडेट कर दिया है। मैंने AddFilesFromDirectoryToDictionary() फ़ंक्शन में एक मामूली बग भी तय किया है। – Hans

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

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