前の投稿では、C#を使用してZIPアーカイブを作成するさまざまな方法について説明しました。この記事では、暗号化されパスワードで保護されたZIPアーカイブを作成する方法についても説明しました。 ZIP形式の他に、7z、tar、RARなどの一般的に使用されるアーカイブ形式があります。これらの中で、7zアーカイブ形式はオープンソースアーキテクチャに基づいていますまた、高い圧縮率でファイルやフォルダを圧縮するために使用されます。また、256ビットのAES暗号化をサポートし、ファイル名の暗号化も可能にします。この記事では、C#を使用してプログラムで7z(7-Zip)アーカイブを作成する方法を示します。
この記事は次のセクションに分かれています。
この記事のすべての手順とコードサンプルは、Aspose.ZIP for.NETに基づいています。したがって、次のいずれかの方法を使用してAPIをインストールしたことを確認してください。
- NuGetパッケージマネージャーを使用してインストールします。
- ダウンロード DLL and add its reference to the project.
C#を使用して7z(7-Zip)アーカイブを作成する
ファイルを7zアーカイブに圧縮するシナリオは2つ考えられます。ファイルが1つしかない場合もあれば、圧縮するファイルが多数ある場合もあります。両方のシナリオを明示的に処理できます。
単一エントリで7zアーカイブを作成する
以下は、単一のエントリで7zアーカイブを作成する手順です。
- 新しいFileStreamを開いて、7zファイルを作成します。
- SevenZipArchiveクラスのインスタンスを作成します。
- SevenZipArchive.CreateEntry(string, string, Boolean, SevenZipEntrySettings)メソッドを使用してファイルをアーカイブに追加します。
- SevenZipArchive.Save(Stream)メソッドを使用してアーカイブを作成および保存します。
次のコードサンプルは、C#を使用して7z(7-Zip)アーカイブを作成する方法を示しています。
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("data.bin", "file.dat");
archive.Save(sevenZipFile);
}
}
複数のエントリで7zアーカイブを作成する
この場合、ファイルをフォルダーに入れ、フォルダーのパスをSevenZipArchive.CreateEntries()メソッドに渡すことができます。以下は、7zアーカイブに複数のファイルエントリを追加する手順です。
- SevenZipArchiveクラスのインスタンスを作成します。
- フォルダのパスをSevenZipArchive.CreateEntries(string, Boolean)メソッドに渡します。
- SevenZipArchive.Save(String)メソッドを呼び出します。
次のコードサンプルは、C#を使用して複数のエントリを持つ7zアーカイブを作成する方法を示しています。
using (SevenZipArchive archive = new SevenZipArchive())
{
archive.CreateEntries(dataDir);
archive.Save("SevenZip.7z");
}
C#を使用してAES暗号化7zアーカイブを作成する
7z形式は、ファイルを保護するためのAES暗号化をサポートしています。 7zファイルを暗号化するために、SevenZipAESEncryptionSettingsクラスが使用されます。次のコードサンプルは、C#を使用してAES暗号化7zアーカイブを作成する方法を示しています。
using (var archive = new SevenZipArchive(new SevenZipEntrySettings(null, new SevenZipAESEncryptionSettings("p@s$"))))
{
archive.CreateEntry("data.bin", new MemoryStream(new byte[] { 0x00, 0xFF }));
archive.Save("archive.7z");
}
C#を使用して7zエントリに異なるパスワードを設定する
7z形式では、ファイルエントリごとに異なるパスワードを指定することもできます。たとえば、7zアーカイブ内の2つのファイルを圧縮する場合は、ファイルごとに異なるパスワードを指定できます。以下は、7zエントリに異なるパスワードを設定する手順です。
- 7zアーカイブファイル用の新しいFileStreamを作成します。
- FileInfoクラスを使用してすべてのファイルエントリにアクセスします。
- SevenZipArchiveクラスのインスタンスを作成します。
- SevenZipArchive.CreateEntry(String, FileInfo,Boolean, SevenZipEntrySettings)を使用して7zアーカイブにエントリを作成します
- SevenZipArchive.Save(Stream)メソッドを使用してアーカイブを保存します。
次のコードサンプルは、7zアーカイブのすべてのエントリにパスワードを設定する方法を示しています。
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo fi1 = new FileInfo("data1.bin");
FileInfo fi2 = new FileInfo("data2.bin");
FileInfo fi3 = new FileInfo("data3.bin");
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("entry1.bin", fi1, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test1")));
archive.CreateEntry("entry2.bin", fi2, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test2")));
archive.CreateEntry("entry3.bin", fi3, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test3")));
archive.Save(sevenZipFile);
}
}
結論
この記事では、C#を使用してプログラムで7zアーカイブを作成する方法を学びました。さらに、AES暗号化7zファイルを作成し、すべてのファイルエントリにパスワードを設定する方法を見てきました。ファイルの圧縮/解凍について詳しくは、こちらをご覧ください。