【C#】7zipファイルの展開・圧縮方法
Squid-Box.SevenZipSharpによる7zipファイルの展開・圧縮方法について記載します。
<確認環境>
Windows10 64bit
Visual Studio 2022
.NET6.0
Squid-Box.SevenZipSharp v1.6.1.23
7zip v19.00(x64)
Windows10 64bit
Visual Studio 2022
.NET6.0
Squid-Box.SevenZipSharp v1.6.1.23
7zip v19.00(x64)
Squid-Box.SevenZipSharpとは
Squid-Box.SevenZipSharpは、7zipファイルを簡単に操作するためのオープンソースのライブラリで、.NET Frameworkおよび.NETCoreで使用できます。ライセンスはLGPL-3.0で提供されます。
インストール
Squid-Box.SevenZipSharpのインストール
Visual Studio のメニューから[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択して以下のコマンドを実行します。
Install-Package Squid-Box.SevenZipSharp
または、[プロジェクト] > [NuGet パッケージ管理]でSquid-Box.SevenZipSharpを検索してインストールします。
![Squid-Box.SevenZipSharpのインストール](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYIAFyUSbOoG8T2ByzLIBiiVvaNLDWud8SCC0bGPjGFFCw2nOjsCUSbvpuwbskEf6ICUE0DUCzvnnFF4WSqozSH51p-Up-yAHta4Ye1xWg_NkQcSjGsQoLlX_8jzoaxgrmWB6YhUFqXtouCzCChVhf86S8C7sraZkggUi6rZAvnDnAYw9BoHT--jJgrQ/s1600/Squid-Box.SevenZipSharp_Install.png)
7zipのインストール
以下のサイトから7zipインストーラーをダウンロードしてインストールします。
https://7-zip.org/download.html
https://7-zip.org/download.html
Squid-Box.SevenZipSharpによる7zipファイル展開
7zipファイルの展開例を記載します。
ディレクトリに展開
7zipファイルを指定したディレクトリに展開します。
SetLibraryPathメソッド : 7z.dllのパスを指定します。
SevenZipExtractorクラス : 7zipファイル展開クラス。第1引数に展開する7zipファイル、第2引数にパスワードを指定します。(パスワードがないときは指定しない。)
ExtractArchiveメソッド : 指定したディレクトリに7zipファイルを展開します。
SevenZipExtractorクラス : 7zipファイル展開クラス。第1引数に展開する7zipファイル、第2引数にパスワードを指定します。(パスワードがないときは指定しない。)
ExtractArchiveメソッド : 指定したディレクトリに7zipファイルを展開します。
using SevenZip;
// 7z.dllファイルパス設定
SevenZip.SevenZipBase.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
using (var extractor = new SevenZipExtractor(@"C:\work\archive.7z", @"password"))
{
// ディレクトリに7zipファイルを展開
extractor.ExtractArchive(@"C:\work\archive");
}
メモリに展開
7zipファイルの内容をメモリ上に展開して取得します。
SetLibraryPathメソッド : 7z.dllのパスを指定します。
SevenZipExtractorクラス : 7zipファイル展開クラス。第1引数に展開する7zipファイル、第2引数にパスワードを指定します。(パスワードがないときは指定しない。)
ExtractFileメソッド : 第1引数に展開するファイル、第2引数にStreamを指定します。
SevenZipExtractorクラス : 7zipファイル展開クラス。第1引数に展開する7zipファイル、第2引数にパスワードを指定します。(パスワードがないときは指定しない。)
ExtractFileメソッド : 第1引数に展開するファイル、第2引数にStreamを指定します。
using SevenZip;
// 7z.dllファイルパス設定
SevenZip.SevenZipBase.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
using (var extractor = new SevenZipExtractor(@"C:\work\archive.7z", "password"))
{
// ファイルパス取得
var fileName = extractor.ArchiveFileNames.First(x => x.Contains("file01.txt"));
// MemoryStreamにファイル展開
var memoryStream = new MemoryStream();
extractor.ExtractFile(fileName, memoryStream);
// MemoryStreamから文字列を読み込む
var text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
Squid-Box.SevenZipSharpによる7zipファイル圧縮
7zipファイルの圧縮例を記載します。
ディレクトリを圧縮
指定したディレクトリ以下のすべてのファイルを7zipファイルに圧縮します。
SetLibraryPathメソッド : 7z.dllのパスを指定します。
SevenZipCompressorクラス : 7zipファイル圧縮クラス。プロパティに圧縮モード、圧縮レベル、圧縮方式を設定できます。
CompressDirectoryメソッド : 第1引数に圧縮するディレクトリ、第2引数に圧縮後のファイルパス、第3引数にパスワードを指定します。(パスワードがないときは指定しない。)
SevenZipCompressorクラス : 7zipファイル圧縮クラス。プロパティに圧縮モード、圧縮レベル、圧縮方式を設定できます。
CompressDirectoryメソッド : 第1引数に圧縮するディレクトリ、第2引数に圧縮後のファイルパス、第3引数にパスワードを指定します。(パスワードがないときは指定しない。)
using SevenZip;
// 7z.dllファイルパス設定
SevenZip.SevenZipBase.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMode = CompressionMode.Create; // 圧縮モード設定
compressor.CompressionLevel = CompressionLevel.Ultra; // 圧縮レベル設定
compressor.CompressionMethod = CompressionMethod.Lzma2; // 圧縮方式設定
// ディレクトリ以下を7zipファイルに圧縮
compressor.CompressDirectory(@"C:\work\archive", @"C:\work\archive.7z", @"password");
メモリの内容を圧縮
メモリに保持している内容を圧縮して7zipファイルを作成します。
SetLibraryPathメソッド : 7z.dllのパスを指定します。
SevenZipCompressorクラス : 7zipファイル圧縮クラス。プロパティに圧縮モード、圧縮レベル、圧縮方式を設定できます。
CompressStreamDictionaryメソッド : 第1引数に圧縮データ(ファイル名とStream)、第2引数に圧縮データを格納するStream、第3引数にパスワードを指定します。(パスワードがないときは指定しない。)
SevenZipCompressorクラス : 7zipファイル圧縮クラス。プロパティに圧縮モード、圧縮レベル、圧縮方式を設定できます。
CompressStreamDictionaryメソッド : 第1引数に圧縮データ(ファイル名とStream)、第2引数に圧縮データを格納するStream、第3引数にパスワードを指定します。(パスワードがないときは指定しない。)
using SevenZip;
// 7z.dllファイルパス設定
SevenZip.SevenZipBase.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
// 圧縮するStream作成
var stream1 = new MemoryStream();
var writer1 = new StreamWriter(stream1);
writer1.Write(@"おはよう");
writer1.Flush();
stream1.Position = 0;
var stream2 = new MemoryStream();
var writer2 = new StreamWriter(stream2);
writer2.Write(@"こんにちは");
writer2.Flush();
stream2.Position = 0;
// 圧縮するStreamをDictionaryに登録する
var streamDict = new Dictionary<string, Stream>
{
{ @"file01.txt", stream1 },
{ @"file02.txt", stream2 }
};
// 圧縮後のデータを格納するMemoryStream作成
using (var compressedStream = new MemoryStream())
{
// 7zipファイルに圧縮
var compressor = new SevenZipCompressor();
compressor.CompressionMode = CompressionMode.Create; // 圧縮モード設定
compressor.CompressionLevel = CompressionLevel.Ultra; // 圧縮レベル設定
compressor.CompressionMethod = CompressionMethod.Lzma2; // 圧縮方式設定
compressor.CompressStreamDictionary(streamDict, compressedStream, @"password");
// 圧縮データをファイルに書き出す
using (var fileStream = new FileStream(@"C:\work\archive.7z", FileMode.Create, FileAccess.Write))
{
compressedStream.Seek(0, SeekOrigin.Begin);
compressedStream.CopyTo(fileStream);
}
}