【C#】SharpZipLibの解凍と圧縮について
SharpZipLibは、C#でZIPアーカイブを操作するためのオープンソースのライブラリです。以下は、SharpZipLibを使用してZIPアーカイブを圧縮する方法と、解凍する方法の例です。
圧縮する場合の例:
using ICSharpCode.SharpZipLib.Zip;
// Zipファイルに圧縮するフォルダパス
string directoryPath = @"C:\example\directory";
// Zipファイルの保存先パス
string zipFilePath = @"C:\example\archive.zip";
// Zipファイルを作成し、フォルダ内のファイルを圧縮する
using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipFilePath)))
{
// 圧縮レベルを設定する
zipStream.SetLevel(5);
// フォルダ内のファイルを取得する
string[] files = Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories);
// ファイルを圧縮してZipファイルに追加する
foreach (string file in files)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
zipStream.PutNextEntry(entry);
using (FileStream fileStream = File.OpenRead(file))
{
byte[] buffer = new byte[4096];
int count = 0;
do
{
count = fileStream.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, count);
}
while (count > 0);
}
}
// Zipファイルをクローズする
zipStream.Close();
}
解凍する場合の例:
using ICSharpCode.SharpZipLib.Zip;
// 解凍するZipファイルのパス
string zipFilePath = @"C:\example\archive.zip";
// 解凍先のフォルダパス
string extractPath = @"C:\example\extract";
// Zipファイルをオープンして解凍する
using (ZipFile zipFile = new ZipFile(File.OpenRead(zipFilePath)))
{
foreach (ZipEntry entry in zipFile)
{
// 解凍先のファイルパスを作成する
string filePath = Path.Combine(extractPath, entry.Name);
// フォルダの場合は作成する
if (entry.IsDirectory)
{
Directory.CreateDirectory(filePath);
continue;
}
// ファイルの場合は解凍する
using (FileStream fileStream = File.Create(filePath))
{
byte[] buffer = new byte[4096];
int count = 0;
using (Stream zipStream = zipFile.GetInputStream(entry))
{
do
{
count = zipStream.Read(buffer, 0, buffer.Length);
fileStream.Write(buffer, 0, count);
}
while (count > 0);
}
}
}
}
コメント
コメントを投稿