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



コメント

このブログの人気の投稿

【C#】簡易電卓

【C#】うるう年判定