gpt4 book ai didi

c# - SevenZipSharp - 如何使用 C# 将多个目录压缩到一个文件中?

转载 作者:太空狗 更新时间:2023-10-29 23:15:34 28 4
gpt4 key购买 nike

我想使用 SevenZipCompressor 将 3 个文件夹压缩到一个文件中。我知道如何压缩单个文件夹。这样的事情可能吗??

谢谢!

最佳答案

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

然后只需按以下方式将文件添加到字典中:

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);
}
}

您还可以使用以下代码更改创建一个ZIP 存档:

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);
}

关于c# - SevenZipSharp - 如何使用 C# 将多个目录压缩到一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154333/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com