.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ファイルをマージする手順です。
- Archiveクラスを使用して最初のZIPファイルをロードします。
- 同様に、Archiveクラスを使用して2番目のZIPファイルをロードします。
- 次に、Archive.Entriesコレクションを使用して最初のZIPのエントリをループします。
- ArchiveEntry.Open().CopyTo(MemoryStream)メソッドを使用して、各ArchiveEntryをMemoryStreamオブジェクトにコピーします。
- Archive.CreateEntry(string, MemoryStream)メソッドを使用して、2番目のZIPにエントリを追加します。
- Archive.Save(string)メソッドを使用して、マージされた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アーカイブをマージする方法を確認しましょう。これを実現するための手順は次のとおりです。
- TarArchiveクラスを使用して最初のTARファイルをロードします。
- 同様に、TarArchiveクラスを使用して2番目のTARファイルをロードします。
- 次に、TarArchive.Entriesコレクションを使用して、最初のTARのエントリをループします。
- TarEntry.Open().CopyTo(MemoryStream)メソッドを使用して、各TarEntryをMemoryStreamオブジェクトにコピーします。
- TarArchive.CreateEntry(string, MemoryStream)メソッドを使用して、2番目のTARにエントリを追加します。
- TarArchive.Save(string)メソッドを使用して、マージされた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アーカイブにマージする方法を説明します。この操作を実行する手順は次のとおりです。
- Archiveクラスを使用してZIPファイルをロードします。
- TarArchiveクラスを使用してTARファイルをロードします。
- 次に、Archive.Entriesコレクションを使用してZIPのエントリをループします。
- ArchiveEntry.Open().CopyTo(MemoryStream)メソッドを使用して、各ArchiveEntryをMemoryStreamオブジェクトにコピーします。
- TarArchive.CreateEntry(string, MemoryStream)メソッド。を使用してTARにエントリを追加します
- TarArchive.Save(string)メソッドを使用して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の詳細については、ドキュメントにアクセスしてください。また、フォーラムにクエリを投稿することもできます。