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);
}
@subirshan: मेरा उत्तर मदद करता है? – Hans
ऐसा लगता है कि यह केवल .7z फ़ाइलों के लिए काम करता है, न कि .zip फ़ाइलें? क्या ये सही है? –
@ मार्कर्कडमैन: आप एक .zip संग्रह भी बना सकते हैं। मैंने .zip संग्रह बनाने का तरीका दिखाने के लिए अपना उत्तर अपडेट कर दिया है। मैंने AddFilesFromDirectoryToDictionary() फ़ंक्शन में एक मामूली बग भी तय किया है। – Hans