C#で複数のZIPまたはTARアーカイブをマージする

.NETアプリケーション内からアーカイブを操作しているときに、複数のZIPまたはTARファイルをマージする必要がある場合があります。たとえば、複数のアーカイブからファイルとフォルダーを抽出して、それらを1つのアーカイブに入れたい場合があります。これを実現するために、この記事では、C#で複数のZIPまたはTARファイルをマージする方法について説明します。 ZIPからZIPへのマージ、TARからTARへのマージ、ZIPからTARへのマージ、およびTARからZIPへのマージについて説明します。

ZIPファイルとTARファイルをマージするC#.NET API

複数のZIPアーカイブとTARアーカイブをマージするには、Aspose.ZIP for.NETを利用します。これは、さまざまな一般的なアーカイブ形式を作成および操作できる、機能豊富な.NET APIです。 APIのDLLをダウンロードするか、NuGetを使用して直接インストールできます。

PM> Install-Package Aspose.Zip

C#で複数のZIPファイルをマージする

アーカイブをZIP形式でマージする旅を始めましょう。 2つのZIPアーカイブを取得し、それらのエントリを1つのZIPファイルに収集します。以下は、C#で複数のZIPファイルをマージする手順です。

次のコードサンプルは、C#で2つのZIPファイルをマージする方法を示しています。

// ソースZIPアーカイブをロードする
using (Archive sourceArchive = new Archive("Archives/SourceArchive.zip"))
{
    // 宛先ZIPアーカイブをロード
    using (Archive destArchive = new Archive("Archives/DestinationArchive.zip"))
    {
        // エントリを繰り返します
        foreach (ArchiveEntry entry in sourceArchive.Entries)
        {
            // エントリがディレクトリではないことを確認してください。ディレクトリであるエントリはスキップされますが、それらのファイルは相対パスを尊重して追加されます。
            if (!entry.IsDirectory)
            {
                // エントリをメモリストリームにロードします
                MemoryStream mem = new MemoryStream();
                entry.Open().CopyTo(mem);

                // 宛先ZIPにエントリを追加する
                destArchive.CreateEntry(entry.Name, mem);
            } 
        }

        // マージされたアーカイブを個別に保存
        destArchive.Save("Archives/merged-archive.zip");
    }
}

C#で複数のTARファイルをマージする

次に、C#で複数のTARアーカイブをマージする方法を確認しましょう。これを実現するための手順は次のとおりです。

次のコードサンプルは、C#で複数のTARファイルをマージする方法を示しています。

// ソースTARアーカイブをロードする
using (TarArchive sourceArchive = new TarArchive("Archives/SourceArchive.tar"))
{
    // 宛先TARアーカイブをロードします
    using (TarArchive destArchive = new TarArchive("Archives/DestinationArchive.tar"))
    {
        // エントリを繰り返します
        foreach (TarEntry entry in sourceArchive.Entries)
        {
            // エントリがディレクトリではないことを確認してください。ディレクトリであるエントリはスキップされますが、それらのファイルは相対パスを尊重して追加されます。
            if (!entry.IsDirectory)
            {
                // エントリをメモリストリームにロードします
                MemoryStream mem = new MemoryStream();
                entry.Open().CopyTo(mem);

                // 宛先TARにエントリを追加します
                destArchive.CreateEntry(entry.Name, mem);
            }
        }

        // マージされたアーカイブを個別に保存
        destArchive.Save("Archives/merged-archive.tar");
    }
}

C#でZIPをTARにマージ

このセクションでは、ZIPファイルをC#のTARアーカイブにマージする方法を説明します。この操作を実行する手順は次のとおりです。

次のコードサンプルは、ZIPアーカイブをTARにマージする方法を示しています。

// ソースZIPアーカイブをロードする
using (Archive zipArchive = new Archive("Archives/SourceArchive.zip"))
{
    // 宛先TARアーカイブをロードします
    using (TarArchive tarArchive = new TarArchive("Archives/DestinationArchive.tar"))
    {
        // エントリを繰り返します
        foreach (ArchiveEntry entry in zipArchive.Entries)
        {
            // エントリがディレクトリではないことを確認してください。ディレクトリであるエントリはスキップされますが、それらのファイルは相対パスを尊重して追加されます。
            if (!entry.IsDirectory)
            {
                // エントリをメモリストリームにロードします
                MemoryStream mem = new MemoryStream();
                entry.Open().CopyTo(mem);

                // 宛先TARにエントリを追加します
                tarArchive.CreateEntry(entry.Name, mem);
            }
        }

        // マージされたアーカイブを個別に保存
        tarArchive.Save("Archives/merged-archive.tar");
    }
}

C#でTARとZIPを組み合わせる

前の例と同様に、TARファイルをZIPにマージできます。次のコードサンプルは、TARからファイルを抽出してZIPにマージする方法を示しています。

// TARアーカイブをロードする
using (TarArchive tarArchive = new TarArchive("Archives/SourceArchive.tar"))
{
    // ZIPアーカイブをロード
    using (Archive zipArchive = new Archive("Archives/DestinationArchive.zip"))
    {
        // エントリを繰り返します
        foreach (TarEntry entry in tarArchive.Entries)
        {
            // エントリがディレクトリではないことを確認してください。ディレクトリであるエントリはスキップされますが、それらのファイルは相対パスを尊重して追加されます。
            if (!entry.IsDirectory)
            {
                // エントリをメモリストリームにロードします
                MemoryStream mem = new MemoryStream();
                entry.Open().CopyTo(mem);

                // ZIPにエントリを追加
                zipArchive.CreateEntry(entry.Name, mem);
            }
        }

        // マージされたアーカイブを個別に保存
        zipArchive.Save("Archives/merged-archive.zip");
    }
}

無料のAPIライセンスを取得する

無料の一時ライセンスを取得することで、評価の制限なしにAspose.ZIPfor.NETを使用できます。

結論

この記事では、C#で複数のZIPまたはTARアーカイブをプログラムでマージする方法を学習しました。特に、ZIPファイル、TARファイル、ZIPをTARに、TARをZIPに動的にマージする方法について説明しました。 Aspose.ZIP for .NETの詳細については、ドキュメントにアクセスしてください。また、フォーラムにクエリを投稿することもできます。

関連項目