圧縮ファイル形式用の C# .NET ライブラリ
ZIP、GZIP、TAR、BZIP2 などのファイル アーカイバ形式用のオープン ソースの無料 .NET API。
SharpZipLib を使い始める
SharpZipLib を設定するには、.NET Framework 4.5 以降が必要です。前提条件が満たされたら、GitHub からリポジトリを手動でダウンロードするか、NuGet からアセンブリを直接取得できます。
SharpZipLib をインストールする推奨される方法は、NuGet パッケージとして利用できる NuGet からです。
NuGet から SharpZipLib をインストールする
Install-Package SharpZipLib
ZIP ファイルを作成および抽出するための NET ライブラリ
SharpZipLib を使用すると、ソフトウェア開発者は独自の .NET アプリケーション内で ZIP ファイルを作成できます。開発者は、ディレクトリ内で使用可能なすべてのファイルを簡単に圧縮し、それらを 1 つの zip ファイルに割り当てることができます。 ZIP は最も一般的な圧縮ファイル形式の 1 つであり、ユーザーはファイルのサイズを縮小することができます。この API は、ZIP ファイルのコンテンツをユーザーが選択した場所に抽出することもサポートしています
ZIP からファイルを抽出する - C#
// Open zip file
using (Stream fsInput = File.OpenRead("D:\\input.zip"))
using (var zf = new ZipFile(fsInput))
{
// Set password if required
zf.Password = "12345";
// Unzip data
foreach (ZipEntry zipEntry in zf)
{
if (!zipEntry.IsFile)
{
// Ignore directories
continue;
}
String entryFileName = zipEntry.Name;
var directoryName = "D:\\output\\test";
if (directoryName.Length > 0)
{
Directory.CreateDirectory(directoryName);
}
var buffer = new byte[4096];
using (var zipStream = zf.GetInputStream(zipEntry))
using (Stream fsOutput = File.Create("data.zip"))
{
StreamUtils.Copy(zipStream, fsOutput, buffer);
}
}
}
パスワードで保護された ZIP ファイルを作成する
SharpZipLib は、ソフトウェア開発者がフォルダー内のすべてのファイルを ZIP ファイルに圧縮し、作成されたファイルのパスワードを定義する機能を提供します。保護なしで ZIP ファイルを作成する場合は、その値を null に設定するか、パスワード保護なしでファイルを残すことを宣言しないでください。多数のファイルをサポートしています。
パスワードで保護された ZIP ファイルを作成する - C#
// Create a new ZIP file
using (FileStream fsOut = File.Create("D:\\output.zip"))
using (var zipStream = new ZipOutputStream(fsOut))
{
//0-9, 9 being the highest level of compression
zipStream.SetLevel(3);
// Set password
zipStream.Password = "12345";
// Add files
var files = Directory.GetFiles("D:\\sample");
foreach (var filename in files)
{
var fi = new FileInfo(filename);
// Make the name in zip based on the folder
var entryName = filename.Substring(1);
// Remove drive from name and fixe slash direction
entryName = ZipEntry.CleanName(entryName);
var newEntry = new ZipEntry(entryName);
// Note the zip format stores 2 second granularity
newEntry.DateTime = fi.LastWriteTime;
newEntry.Size = fi.Length;
zipStream.PutNextEntry(newEntry);
var buffer = new byte[4096];
using (FileStream fsInput = File.OpenRead(filename))
{
StreamUtils.Copy(fsInput, zipStream, buffer);
}
zipStream.CloseEntry();
}
}