ZIP アーカイブ形式

データが重要であり、ストレージ効率が最優先されるデジタル時代において、ZIP アーカイブは、ファイルの圧縮と整理のための安定したユビキタスなソリューションであり続けています。

ZIPアーカイブ情報について

ZIP は、暗号化の有無にかかわらず、1 つまたは複数の可逆圧縮ファイルとフォルダーを保持できるアーカイブ形式です。 ZIP は 30 年以上前から知られている最も一般的な形式であり、事実上すべての最新のオペレーティング システムでサポートされています。この形式は、JAR や OpenDocument などの他の形式にも拡張されました。

ZIP アーカイブ ファイル形式の履歴情報

ZIP の最初の形式仕様は 1989 年に公開されました。ZIP のアイデアの作成者は Phil Katz と Gary Conway でした。ファイル サイズの削減効率が高く、低速のインターネット接続や当時の限られたストレージ容量でもファイルの保存と送信が容易になったため、すぐに成功を収めました。 1993 年以来、最も一般的な Deflate 圧縮方法をサポートしています。強力な AES 暗号化は 2003 年に導入されました。非常に古い標準であるにもかかわらず、この標準は化石化せず、現在でも積極的に開発されています。そこで 2020 年に、Zstandard、MP3、XZ 圧縮方式で拡張されました。

ZIPアーカイブの構造

ZIP アーカイブは、圧縮ファイルを効率的に保存および整理しながら、アーカイブ内の個々のファイルに簡単にアクセスできるように、この階層構造で設計されています。 アーカイブの各エントリは個別に圧縮され、独自の圧縮および暗号化方法を使用する場合もあります。アーカイブ内のエントリには、元のファイルのメタデータを含むヘッダーが先行します。目次はファイルの最後にあります。このようなアプローチでは、自己解凍 (SFX) アーカイブを作成できます。また、実行可能部分が SFX ファイルの先頭に存在するため、有効な ZIP アーカイブのままになります。

ZIP 圧縮方法

最新の ZIP では、Deflate、Deflate64™、BZIP2、LZMA、XZ、PPMd、Zstandard アルゴリズムを使用してデータを圧縮できます。ファイルを圧縮せずに保存することもできます。最も一般的なのは Deflate で、これはどのアーカイバ ツールでもデフォルトです。特定のファイル (MP3、JPEG、WAV) の可逆圧縮用のアルゴリズムもあります。 Aspose.ZIP は、Deflate、Deflate64™、Bzip2、LZMA、XZ、PPMd、および Zstandard メソッドを完全にサポートしています。 WavPack 圧縮オーディオを抽出できます。

ZIP アーカイブでサポートされている操作

Aspose.ZIP を使用すると、ZIP アーカイブをさまざまな方法で処理できます。アーカイブを作成したり、再パックせずに既存のアーカイブにエントリを追加したり、アーカイブの残りの部分に影響を与えずに既存のアーカイブからエントリを削除したり、任意のエントリまたはアーカイブ全体を抽出したりすることができます。従来の AES 暗号化アルゴリズムまたは最新の AES 暗号化アルゴリズムを使用して、各エントリを個別に暗号化および復号化できます。 Aspose.ZIP は、自己解凍型のマルチボリューム ZIP アーカイブを作成できます。

ZIP ファイル - 内部構造

前述のとおり、目次である中央ディレクトリは、ZIP アーカイブの終わりの方にあります。このディレクトリはインデックスとして機能し、アーカイブ内のすべてのファイル エントリをアーカイブ内の位置とともにリストします。エントリ ヘッダーには、作成時間と変更時間、ファイル システム属性、ファイル名、コメントを含めることができます。エントリ ヘッダーをカスタムの追加フィールドで拡張して、カスタム メタデータを保存できます。 Zip64 ヘッダーを含めて、アーカイブごとに 65,535 を超えるエントリをサポートすることができます。 Zip64 拡張子を持つ ZIP アーカイブの最大サイズは 264−1 バイトです。 ZIP アーカイブは複数のファイルに分割できます。このような場合、特定のエントリにすばやくアクセスできるように、中央ディレクトリに各ボリュームのオフセットが保存されます。

ZIP ファイル - 内部構造

Zip アーカイブの人気とサポート

ZIP はナンバーワンのアーカイブ形式です。 ZIP アーカイブは広く認識されサポートされているため、Windows Explorer、macOS Finder などの一般的なファイル マネージャー、 7-ZipWinRAR などのオープンソース ツールを含むさまざまなソフトウェア アプリケーションがネイティブ サポートを提供しています。 ZIP ファイルの作成と解凍。このサポートは、クラウド ストレージ サービス、電子メール クライアント、さらにはモバイル デバイスにまで拡張されます。

ZIP ファイルの使用例

ZIP アーカイブは、データを圧縮して整理するための普遍的なファイル形式であり、さまざまなソフトウェア アプリケーションで不可欠なものとなっています。 .NET を介したアーカイブの操作により、開発者は Zip ファイルを簡単に操作できるようになります。次のコード例では、Zip アーカイブの操作機能を詳しく説明し、 新しい Zip を作成 アーカイブからファイルを効率的に抽出する方法を示します。既存のもの。これらの例は、このライブラリの機能を利用して、.NET プロジェクトで Zip アーカイブをシームレスに管理するのに役立ちます。

Create Zip file via .NET

Compose ZIP archive with two entries added by their paths.:

using (var archive = new Archive())
{
    archive.CreateEntry("entry_name1.dat", "input_file1.dat");
    archive.CreateEntry("entry_name2.dat", "input_file2.dat");
    archive.Save("result_archive.zip");
}

How to UnZIP files in C#

Steps: Unzip File to Folder in C#

  • Create an instance of Archive class based on your zip file.
  • Unzip the zip file using Archive.ExtractToDirectory method to your folder.
using (var archive = new Archive("input_archive.zip"))
{
    archive.ExtractToDirectory("outputDirectory");
}

Compressing Single File ZIP File

Steps: Compressing Single File in C#

  • Create a file stream with the desired name of your output zip file.
  • Create file stream of the data file to be compressed and encrypted.
  • Create an instance of Archive class and pass to it an instance of ArchiveEntrySettings class with AesEcryptionSettings instance, specifying the password.
  • Add data file created in step 2 using Archive.CreateEntry method.
  • Compress and encrypt the data file using Archive.Save method and pass it the file stream created in step 1.
using (var zipFile = File.Open("EncrypedWithAES256.zip", FileMode.Create))
{
    using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
     {
           using (var archive = new Archive(new ArchiveEntrySettings(null, new  AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
           {
                  archive.CreateEntry("alice29.txt", source);
                  archive.Save(zipFile);
           }
      }
}

Deleting entries from existing archive

You do not have to repack whole archive when you only need to remove one entry from it. Steps:

  • Create a file stream with the desired name of your output zip file.
  • Create an instance of Archive class based on your zip file.
  • Delete the first file - the entry with zero index – from the archive.
  • Save the archive without excluded entry to output stream from step 1
using (FileStream outputZipFile = File.Open(withoutAnEntry.zip, FileMode.Create))
{
    using (Archive archive = new Archive(archive.zip))
    {
        archive.DeleteEntry(archive.Entries[0]);
        archive.Save(outputZipFile);
    }
}

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

Zip アーカイブに関する追加情報

人々は尋ねてきました

1. どの暗号化方式を選択すればよいですか?

ZIP 形式は、従来の (ZipCrypto) および最新の AES 暗号化技術をサポートしています。前者は後者よりもはるかに弱く、簡単に壊れます。 ZipCrypto は、レガシーの Aspose.ZIP によってサポートされています。アーカイブを作成するときは、AES256 暗号化のみを使用してください。

2. 圧縮にマルチコア プロセッサを利用する方法はありますか?

Aspose.ZIP を使用すると、さまざまな CPU コアごとに ZIP アーカイブのエントリを作成できます。これにより、合計の圧縮時間を大幅に短縮できます。説明と使用例については、 記事 を参照してください。

3. zip にウイルスが感染することはありますか?

はい、ファイル自体が感染している場合、Zip アーカイブ内のファイルがウイルスに感染する可能性があります。 Zip 形式自体は本質的に有害ではありませんが、他のファイル形式と同様に、感染したファイルを保存したり転送したりする可能性があります。