SevenZipCompressorを使用して3つのフォルダを1つのファイルに圧縮したい。 私は単一のフォルダを圧縮する方法を知っています。 そのようなことは可能ですか?SevenZipSharp - C#を使用して複数のディレクトリを1つのファイルに圧縮する方法は?
ありがとうございました!
SevenZipCompressorを使用して3つのフォルダを1つのファイルに圧縮したい。 私は単一のフォルダを圧縮する方法を知っています。 そのようなことは可能ですか?SevenZipSharp - C#を使用して複数のディレクトリを1つのファイルに圧縮する方法は?
ありがとうございました!
SevenZipCompressor
クラスは、CompressFileDictionary()
というメソッドを提供します。 メソッドオーバーロードの1つは、ファイルディクショナリとファイルストリームが必要です。 ファイル辞書は普通の.Net Dictionary<string,string>
です。 辞書のキーは、 のファイルの名前(または相対パス)であり、辞書の値はファイルシステム内のファイルへのパスです。
辞書のキーを使用すると、7zアーカイブの構造を制御できます。たとえば あなたは3つのフォルダアーカイブ内
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);
}
}
また、次のコード変更を使用して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);
}
@subirshanを:私の答えの助けをしていますか? – Hans
これは、.zipファイルではなく.7zファイルでのみ有効です。これは正しいです? –
@ MarkRedman:.zipアーカイブを作成することもできます。 .zipアーカイブを作成する方法を示すために私の答えを更新しました。私はまた、AddFilesFromDirectoryToDictionary()関数で小さなバグを修正しました。 – Hans