[C#] SevenZipSharpでファイル圧縮と解凍を簡単に実現

SevenZipSharpは、C#で7-Zip形式のファイル圧縮と解凍を簡単に行うためのライブラリです。

このライブラリを使用することで、7z、zip、rarなどの形式に対応した圧縮・解凍操作をプログラム内で実装できます。

SevenZipSharpは、7-ZipのDLLを利用しており、高い圧縮率と多様なフォーマットのサポートを提供します。

基本的な使用方法としては、SevenZipExtractorクラスを用いてファイルを解凍し、SevenZipCompressorクラスを用いてファイルを圧縮します。

これにより、C#アプリケーション内で簡単にファイルの圧縮・解凍機能を追加できます。

この記事でわかること
  • SevenZipSharpの概要と特徴、対応フォーマットについての理解
  • SevenZipSharpのインストール手順と必要な環境の確認
  • SevenZipCompressorとSevenZipExtractorクラスを用いたファイルの圧縮と解凍の方法
  • 圧縮・解凍時のエラーハンドリングとログの活用方法
  • GUIアプリケーションやバッチ処理、ネットワーク経由でのファイル転送といった応用例

目次から探す

SevenZipSharpとは

SevenZipSharpの概要

SevenZipSharpは、C#で7-Zipの圧縮・解凍機能を利用するためのラッパーライブラリです。

7-Zipは高い圧縮率を誇るオープンソースのアーカイバであり、SevenZipSharpを使用することで、C#アプリケーションから簡単に7-Zipの機能を呼び出すことができます。

このライブラリは、.NET Frameworkおよび.NET Coreで動作し、ファイルの圧縮や解凍を効率的に行うことが可能です。

SevenZipSharpの特徴

SevenZipSharpには以下のような特徴があります。

スクロールできます
特徴説明
高い圧縮率7-Zipの圧縮アルゴリズムを利用することで、他の圧縮形式よりも高い圧縮率を実現します。
多様なフォーマット対応ZIP、7z、TARなど、さまざまな圧縮フォーマットに対応しています。
パスワード保護圧縮ファイルにパスワードを設定することができ、セキュリティを強化できます。
マルチスレッド対応マルチスレッドでの圧縮・解凍が可能で、処理速度を向上させることができます。

対応フォーマット

SevenZipSharpは、以下のような多様な圧縮フォーマットに対応しています。

  • 7z: 7-Zip独自のフォーマットで、高い圧縮率を誇ります。
  • ZIP: 最も一般的な圧縮フォーマットで、広く利用されています。
  • TAR: UNIX系システムでよく使用されるアーカイブ形式です。
  • GZIP: 主にLinuxで使用される圧縮形式で、TARと組み合わせて使用されることが多いです。
  • BZIP2: GZIPよりも高い圧縮率を提供するフォーマットです。

これらのフォーマットに対応しているため、SevenZipSharpを使用することで、さまざまな圧縮形式のファイルを扱うことができます。

SevenZipSharpのインストール

必要な環境

SevenZipSharpを使用するためには、以下の環境が必要です。

スクロールできます
項目詳細
開発環境Visual Studio 2017以降
.NETバージョン.NET Framework 4.0以上 または .NET Core 2.0以上
7-Zip DLL7z.dll(32ビットまたは64ビット)

これらの環境を整えることで、SevenZipSharpを利用した圧縮・解凍機能をC#アプリケーションに組み込むことができます。

NuGetパッケージのインストール

SevenZipSharpはNuGetパッケージとして提供されているため、Visual StudioのNuGetパッケージマネージャーを使用して簡単にインストールできます。

以下の手順でインストールを行います。

  1. Visual Studioでプロジェクトを開きます。
  2. メニューバーから「ツール」→「NuGet パッケージ マネージャー」→「ソリューションの NuGet パッケージの管理」を選択します。
  3. 「参照」タブで SevenZipSharp を検索します。
  4. 検索結果から SevenZipSharp を選択し、「インストール」ボタンをクリックします。

これで、SevenZipSharpがプロジェクトに追加され、使用可能になります。

7-Zip DLLの設定

SevenZipSharpを使用するには、7-ZipのDLLファイル(7z.dll)が必要です。

このDLLは、SevenZipSharpが7-Zipの機能を呼び出すために使用します。

以下の手順で設定を行います。

  1. 7-Zipの公式サイトから7z.dllをダウンロードします。

32ビット版と64ビット版があるため、開発環境に合わせて選択してください。

  1. ダウンロードした7z.dllをプロジェクトの実行ディレクトリにコピーします。
  2. プロジェクトのプロパティで、7z.dllを「出力ディレクトリにコピー」するように設定します。

DLLは基本的にexeファイルと同じフォルダにないといけないので必ず設定してください。

これにより、SevenZipSharpが7z.dllを正しく参照できるようになり、圧縮・解凍機能を利用する準備が整います。

ファイルの圧縮

SevenZipCompressorクラスの使い方

SevenZipSharpでファイルを圧縮するには、SevenZipCompressorクラスを使用します。

このクラスは、ファイルやディレクトリを指定したフォーマットで圧縮するための機能を提供します。

以下に基本的な使い方を示します。

using SevenZip; // SevenZipSharpの名前空間を使用
class Program
{
    static void Main(string[] args)
    {
        // SevenZipCompressorのインスタンスを作成
        SevenZipCompressor compressor = new SevenZipCompressor();
        // 圧縮するファイルのパスと出力先のパスを指定
        string sourceFile = "圧縮するファイルのパス";
        string destinationArchive = "出力先のアーカイブパス.7z";
        // 圧縮を実行
        compressor.CompressFiles(destinationArchive, sourceFile);
    }
}

このコードでは、SevenZipCompressorのインスタンスを作成し、CompressFilesメソッドを使用して指定したファイルを圧縮しています。

圧縮オプションの設定

SevenZipCompressorクラスでは、圧縮の際にさまざまなオプションを設定することができます。

以下に代表的なオプションを示します。

  • CompressionLevel: 圧縮レベルを設定します。

CompressionLevel.Ultraなどの値を指定できます。

  • ArchiveFormat: 出力するアーカイブのフォーマットを指定します。

OutArchiveFormat.SevenZipOutArchiveFormat.Zipなどがあります。

  • CompressionMethod: 圧縮方法を指定します。

CompressionMethod.LzmaCompressionMethod.BZip2などがあります。

以下に、これらのオプションを設定した例を示します。

using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        SevenZipCompressor compressor = new SevenZipCompressor
        {
            CompressionLevel = CompressionLevel.Ultra, // 圧縮レベルを最高に設定
            ArchiveFormat = OutArchiveFormat.Zip, // 出力フォーマットをZIPに設定
            CompressionMethod = CompressionMethod.Lzma // 圧縮方法をLZMAに設定
        };
        string sourceFile = "圧縮するファイルのパス";
        string destinationArchive = "出力先のアーカイブパス.zip";
        compressor.CompressFiles(destinationArchive, sourceFile);
    }
}

複数ファイルの圧縮

複数のファイルを一つのアーカイブに圧縮することも可能です。

CompressFilesメソッドに複数のファイルパスを渡すことで実現できます。

using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        SevenZipCompressor compressor = new SevenZipCompressor
        {
            CompressionLevel = CompressionLevel.Normal, // 通常の圧縮レベル
            ArchiveFormat = OutArchiveFormat.SevenZip // 7zフォーマットを使用
        };
        // 複数のファイルを指定
        string[] sourceFiles = { "ファイル1のパス", "ファイル2のパス", "ファイル3のパス" };
        string destinationArchive = "出力先のアーカイブパス.7z";
        // 複数ファイルを圧縮
        compressor.CompressFiles(destinationArchive, sourceFiles);
    }
}

この例では、sourceFiles配列に複数のファイルパスを指定し、それらを一つの7zアーカイブに圧縮しています。

圧縮後のアーカイブは指定したdestinationArchiveに保存されます。

ファイルの解凍

SevenZipExtractorクラスの使い方

SevenZipSharpでファイルを解凍するには、SevenZipExtractorクラスを使用します。

このクラスは、指定したアーカイブファイルを解凍するための機能を提供します。

以下に基本的な使い方を示します。

using SevenZip; // SevenZipSharpの名前空間を使用
class Program
{
    static void Main(string[] args)
    {
        // 解凍するアーカイブファイルのパスを指定
        string archiveFile = "解凍するアーカイブのパス.7z";
        
        // SevenZipExtractorのインスタンスを作成
        using (SevenZipExtractor extractor = new SevenZipExtractor(archiveFile))
        {
            // 解凍を実行
            extractor.ExtractArchive("解凍先のディレクトリパス");
        }
    }
}

このコードでは、SevenZipExtractorのインスタンスを作成し、ExtractArchiveメソッドを使用して指定したアーカイブを解凍しています。

解凍先の指定

解凍先のディレクトリを指定することで、アーカイブの内容を任意の場所に展開することができます。

ExtractArchiveメソッドの引数に解凍先のパスを指定します。

using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        string archiveFile = "解凍するアーカイブのパス.zip";
        string destinationDirectory = "解凍先のディレクトリパス";
        using (SevenZipExtractor extractor = new SevenZipExtractor(archiveFile))
        {
            // 解凍先を指定して解凍
            extractor.ExtractArchive(destinationDirectory);
        }
    }
}

この例では、ZIP形式のアーカイブを指定したディレクトリに解凍しています。

パスワード付きアーカイブの解凍

パスワードで保護されたアーカイブを解凍する場合、SevenZipExtractorのコンストラクタでパスワードを指定する必要があります。

以下にその方法を示します。

using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        string archiveFile = "パスワード付きアーカイブのパス.7z";
        string destinationDirectory = "解凍先のディレクトリパス";
        string password = "アーカイブのパスワード";
        // パスワードを指定してSevenZipExtractorのインスタンスを作成
        using (SevenZipExtractor extractor = new SevenZipExtractor(archiveFile, password))
        {
            // 解凍を実行
            extractor.ExtractArchive(destinationDirectory);
        }
    }
}

このコードでは、パスワード付きの7zアーカイブを解凍しています。

SevenZipExtractorのコンストラクタにパスワードを渡すことで、パスワード保護されたアーカイブを正しく解凍することができます。

エラーハンドリング

圧縮時のエラー処理

ファイルの圧縮中にエラーが発生することがあります。

例えば、ファイルが存在しない場合や、アクセス権限が不足している場合などです。

SevenZipCompressorを使用する際には、例外処理を行うことで、これらのエラーに対処することができます。

using System;
using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        try
        {
            SevenZipCompressor compressor = new SevenZipCompressor();
            string sourceFile = "圧縮するファイルのパス";
            string destinationArchive = "出力先のアーカイブパス.7z";
            // 圧縮を実行
            compressor.CompressFiles(destinationArchive, sourceFile);
        }
        catch (SevenZipException ex)
        {
            // SevenZipSharp特有の例外をキャッチ
            Console.WriteLine("圧縮中にエラーが発生しました: " + ex.Message);
        }
        catch (Exception ex)
        {
            // その他の例外をキャッチ
            Console.WriteLine("予期しないエラーが発生しました: " + ex.Message);
        }
    }
}

このコードでは、SevenZipExceptionをキャッチして、圧縮中のエラーを処理しています。

その他の例外もキャッチして、予期しないエラーに対処しています。

解凍時のエラー処理

解凍時にも同様にエラーが発生する可能性があります。

SevenZipExtractorを使用する際には、例外処理を行うことで、エラーに対処することができます。

using System;
using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        try
        {
            string archiveFile = "解凍するアーカイブのパス.7z";
            string destinationDirectory = "解凍先のディレクトリパス";
            using (SevenZipExtractor extractor = new SevenZipExtractor(archiveFile))
            {
                // 解凍を実行
                extractor.ExtractArchive(destinationDirectory);
            }
        }
        catch (SevenZipException ex)
        {
            // SevenZipSharp特有の例外をキャッチ
            Console.WriteLine("解凍中にエラーが発生しました: " + ex.Message);
        }
        catch (Exception ex)
        {
            // その他の例外をキャッチ
            Console.WriteLine("予期しないエラーが発生しました: " + ex.Message);
        }
    }
}

このコードでは、SevenZipExceptionをキャッチして、解凍中のエラーを処理しています。

その他の例外もキャッチして、予期しないエラーに対処しています。

ログの活用

エラーハンドリングの一環として、ログを活用することで、エラーの詳細を記録し、後で分析することができます。

ログを記録するには、System.Diagnostics名前空間のTraceクラスを使用することが一般的です。

using System;
using System.Diagnostics;
using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        try
        {
            SevenZipCompressor compressor = new SevenZipCompressor();
            string sourceFile = "圧縮するファイルのパス";
            string destinationArchive = "出力先のアーカイブパス.7z";
            // 圧縮を実行
            compressor.CompressFiles(destinationArchive, sourceFile);
        }
        catch (SevenZipException ex)
        {
            // SevenZipSharp特有の例外をキャッチ
            Trace.WriteLine("圧縮中にエラーが発生しました: " + ex.Message);
            Console.WriteLine("圧縮中にエラーが発生しました: " + ex.Message);
        }
        catch (Exception ex)
        {
            // その他の例外をキャッチ
            Trace.WriteLine("予期しないエラーが発生しました: " + ex.Message);
            Console.WriteLine("予期しないエラーが発生しました: " + ex.Message);
        }
    }
}

このコードでは、Trace.WriteLineを使用してエラーメッセージをログに記録しています。

これにより、エラーの発生状況を後で確認することができ、問題の原因を特定しやすくなります。

応用例

GUIアプリケーションでの利用

SevenZipSharpを使用してGUIアプリケーションを作成することで、ユーザーに直感的な操作を提供できます。

例えば、Windows FormsやWPFを使用して、ファイルの圧縮・解凍を行うアプリケーションを開発することが可能です。

以下は、Windows Formsを使用した簡単な例です。

using System;
using System.Windows.Forms;
using SevenZip;
public class MainForm : Form
{
    private Button compressButton;
    private Button extractButton;
    public MainForm()
    {
        compressButton = new Button { Text = "圧縮", Left = 10, Width = 100, Top = 10 };
        extractButton = new Button { Text = "解凍", Left = 120, Width = 100, Top = 10 };
        compressButton.Click += CompressButton_Click;
        extractButton.Click += ExtractButton_Click;
        Controls.Add(compressButton);
        Controls.Add(extractButton);
    }
    private void CompressButton_Click(object sender, EventArgs e)
    {
        // 圧縮処理を実行
        SevenZipCompressor compressor = new SevenZipCompressor();
        compressor.CompressFiles("output.7z", "file1.txt", "file2.txt");
        MessageBox.Show("圧縮が完了しました");
    }
    private void ExtractButton_Click(object sender, EventArgs e)
    {
        // 解凍処理を実行
        using (SevenZipExtractor extractor = new SevenZipExtractor("output.7z"))
        {
            extractor.ExtractArchive("output_directory");
        }
        MessageBox.Show("解凍が完了しました");
    }
}
static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}

この例では、ボタンをクリックすることで、指定したファイルの圧縮と解凍を行います。

バッチ処理での自動化

SevenZipSharpを使用してバッチ処理を作成することで、定期的なファイルの圧縮・解凍を自動化できます。

以下は、コマンドラインアプリケーションでの例です。

using System;
using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine("使用法: batch.exe <compress|extract> <ファイルパス>");
            return;
        }
        string operation = args[0];
        string filePath = args[1];
        if (operation == "compress")
        {
            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.CompressFiles("batch_output.7z", filePath);
            Console.WriteLine("ファイルが圧縮されました");
        }
        else if (operation == "extract")
        {
            using (SevenZipExtractor extractor = new SevenZipExtractor(filePath))
            {
                extractor.ExtractArchive("batch_output_directory");
            }
            Console.WriteLine("ファイルが解凍されました");
        }
        else
        {
            Console.WriteLine("不明な操作です");
        }
    }
}

このコードは、コマンドライン引数を使用して圧縮または解凍を実行します。

スケジュールされたタスクとして設定することで、定期的な処理を自動化できます。

ネットワーク経由でのファイル転送

SevenZipSharpを使用して、ネットワーク経由でファイルを圧縮して転送することも可能です。

圧縮することで、転送するデータ量を削減し、効率的なファイル転送を実現できます。

以下は、圧縮したファイルをFTPでアップロードする例です。

using System;
using System.Net;
using System.IO;
using SevenZip;
class Program
{
    static void Main(string[] args)
    {
        // 圧縮処理
        SevenZipCompressor compressor = new SevenZipCompressor();
        string sourceFile = "file_to_upload.txt";
        string compressedFile = "upload.7z";
        compressor.CompressFiles(compressedFile, sourceFile);
        // FTPアップロード
        string ftpUrl = "ftp://example.com/upload.7z";
        string username = "ユーザー名";
        string password = "パスワード";
        using (WebClient client = new WebClient())
        {
            client.Credentials = new NetworkCredential(username, password);
            client.UploadFile(ftpUrl, WebRequestMethods.Ftp.UploadFile, compressedFile);
        }
        Console.WriteLine("ファイルがアップロードされました");
    }
}

この例では、ファイルを圧縮した後、FTPを使用してサーバーにアップロードしています。

圧縮することで、ネットワーク帯域を節約し、転送時間を短縮することができます。

よくある質問

SevenZipSharpは商用利用可能ですか?

SevenZipSharpは、オープンソースのライブラリであり、GNU Lesser General Public License (LGPL) の下でライセンスされています。

このライセンスに基づき、商用利用も可能です。

ただし、LGPLの条件に従う必要があります。

具体的には、ライブラリを使用するアプリケーションがライブラリのソースコードを変更した場合、その変更を公開する義務があります。

詳細については、LGPLのライセンス文書を確認してください。

圧縮速度を向上させる方法は?

圧縮速度を向上させるためには、以下の方法を検討することができます。

  • 圧縮レベルの調整: 圧縮レベルを低く設定することで、圧縮速度を向上させることができます。

例:compressor.CompressionLevel = CompressionLevel.Fast;

  • マルチスレッドの活用: SevenZipCompressorCompressionModeプロパティをCompressionMode.Multithreadedに設定することで、マルチスレッドによる圧縮を行い、速度を向上させることができます。
  • ファイルの分割: 大きなファイルを複数の小さなファイルに分割して圧縮することで、処理を並列化し、速度を向上させることができます。

他の圧縮ライブラリとの違いは?

SevenZipSharpは、7-Zipの機能をC#で利用するためのラッパーライブラリであり、以下の点で他の圧縮ライブラリと異なります。

  • 高い圧縮率: 7-Zipの圧縮アルゴリズムを使用するため、他の多くのライブラリよりも高い圧縮率を提供します。
  • 多様なフォーマット対応: ZIP、7z、TARなど、さまざまな圧縮フォーマットに対応しており、幅広い用途に対応可能です。
  • オープンソース: オープンソースであるため、ソースコードを確認したり、必要に応じてカスタマイズすることができます。

これらの特徴により、SevenZipSharpは高い圧縮率と柔軟性を求めるプロジェクトに適しています。

まとめ

この記事では、C#でSevenZipSharpを使用してファイルの圧縮と解凍を行う方法について詳しく解説しました。

SevenZipSharpのインストール方法から、圧縮・解凍の基本的な使い方、エラーハンドリング、さらには応用例までをカバーし、実際の開発に役立つ情報を提供しました。

これを機に、SevenZipSharpを活用して、効率的なファイル管理やデータ転送を実現してみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す