ZipArchiveEntry クラス

定義

zip アーカイブ内の圧縮ファイルを表します。Represents a compressed file within a zip archive.

public ref class ZipArchiveEntry
public class ZipArchiveEntry
type ZipArchiveEntry = class
Public Class ZipArchiveEntry
継承
ZipArchiveEntry

最初の例は、zip アーカイブに新しいエントリを作成して書き込む方法を示しています。The first example shows how to create a new entry in a zip archive and write to it.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
                    using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                    {
                            writer.WriteLine("Information about this package.");
                            writer.WriteLine("========================");
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Using zipToOpen As FileStream = New FileStream("c:\users\exampleuser\release.zip", FileMode.Open)
            Using archive As ZipArchive = New ZipArchive(zipToOpen, ZipArchiveMode.Update)
                Dim readmeEntry As ZipArchiveEntry = archive.CreateEntry("Readme.txt")
                Using writer As StreamWriter = New StreamWriter(readmeEntry.Open())
                    writer.WriteLine("Information about this package.")
                    writer.WriteLine("========================")
                End Using
            End Using
        End Using
    End Sub

End Module

2番目の例では、ExtractToFile(ZipArchiveEntry, String) 拡張メソッドを使用する方法を示します。The second example shows how to use the ExtractToFile(ZipArchiveEntry, String) extension method. コードを実行するには、プロジェクトで System.IO.Compression.FileSystem アセンブリを参照する必要があります。You must reference the System.IO.Compression.FileSystem assembly in your project for the code to execute.

using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @".\result.zip";

        Console.WriteLine("Provide path where to extract the zip file:");
        string extractPath = Console.ReadLine();

        // Normalizes the path.
        extractPath = Path.GetFullPath(extractPath);

        // Ensures that the last character on the extraction path
        // is the directory separator char. 
        // Without this, a malicious zip file could try to traverse outside of the expected
        // extraction path.
        if (!extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
            extractPath += Path.DirectorySeparatorChar;

        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    // Gets the full path to ensure that relative segments are removed.
                    string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName));

                    // Ordinal match is safest, case-sensitive volumes can be mounted within volumes that
                    // are case-insensitive.
                    if (destinationPath.StartsWith(extractPath, StringComparison.Ordinal))
                        entry.ExtractToFile(destinationPath);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = ".\result.zip"

        Console.WriteLine("Provide path where to extract the zip file:")
        Dim extractPath As String = Console.ReadLine()

        ' Normalizes the path.
        extractPath = Path.GetFullPath(extractPath)

        ' Ensures that the last character on the extraction path
        ' is the directory separator char. 
        ' Without this, a malicious zip file could try to traverse outside of the expected
        ' extraction path.
        If Not extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) Then
            extractPath += Path.DirectorySeparatorChar
        End If

        Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
            For Each entry As ZipArchiveEntry In archive.Entries
                If entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then

                    ' Gets the full path to ensure that relative segments are removed.
                    Dim destinationPath As String = Path.GetFullPath(Path.Combine(extractPath, entry.FullName))
                    
                    ' Ordinal match is safest, case-sensitive volumes can be mounted within volumes that
                    ' are case-insensitive.
                    If destinationPath.StartsWith(extractPath, StringComparison.Ordinal) Then 
                        entry.ExtractToFile(destinationPath)
                    End If

                End If
            Next
        End Using
    End Sub

End Module

注釈

Zip アーカイブには、各圧縮ファイルのエントリが含まれています。A zip archive contains an entry for each compressed file. ZipArchiveEntry クラスを使用すると、エントリのプロパティを確認し、エントリを開いたり削除したりできます。The ZipArchiveEntry class enables you to examine the properties of an entry, and open or delete the entry. エントリを開くと、圧縮されたファイルのストリームに書き込むことによって、圧縮ファイルを変更できます。When you open an entry, you can modify the compressed file by writing to the stream for that compressed file.

Zip アーカイブとそのファイルエントリを操作するための方法は、3つのクラス (ZipFileZipArchive、および ZipArchiveEntry) に分散されています。The methods for manipulating zip archives and their file entries are spread across three classes: ZipFile, ZipArchive and ZipArchiveEntry.

宛先To… 使用するケースUse…
ディレクトリから zip アーカイブを作成するCreate a zip archive from a directory ZipFile.CreateFromDirectory
Zip アーカイブの内容をディレクトリに抽出するExtract the contents of a zip archive to a directory ZipFile.ExtractToDirectory
既存の zip アーカイブに新しいファイルを追加するAdd new files to an existing zip archive ZipArchive.CreateEntry
Zip アーカイブ内のファイルを取得するRetrieve an file in a zip archive ZipArchive.GetEntry
Zip アーカイブ内のすべてのファイルを取得するRetrieve all of the files in a zip archive ZipArchive.Entries
Zip アーカイブに含まれる個々のファイルへのストリームを開くにはTo open a stream to an individual file contained in a zip archive ZipArchiveEntry.Open
Zip アーカイブからファイルを削除するDelete a file from a zip archive ZipArchiveEntry.Delete

プロジェクトで System.IO.Compression.FileSystem アセンブリを参照する場合は、ZipArchiveEntry クラスの2つの拡張メソッドにアクセスできます。If you reference the System.IO.Compression.FileSystem assembly in your project, you can access two extension methods for the ZipArchiveEntry class. これらのメソッドは ExtractToFile(ZipArchiveEntry, String)ExtractToFile(ZipArchiveEntry, String, Boolean)であり、エントリの内容をファイルに圧縮解除できます。Those methods are ExtractToFile(ZipArchiveEntry, String) and ExtractToFile(ZipArchiveEntry, String, Boolean), and they enable you to decompress the contents of the entry to a file. System.IO.Compression.FileSystem アセンブリは Windows 8Windows 8では使用できません。The System.IO.Compression.FileSystem assembly is not available in Windows 8Windows 8. Windows 8.x ストアWindows 8.x Store アプリでは、DeflateStream または GZipStreamを使用してアーカイブの内容を圧縮解除できます。または、Windows ランタイムWindows Runtime の種類のコンプレッサー解凍を使用して、ファイルの圧縮と圧縮解除を行うことができます。In Windows 8.x ストアWindows 8.x Store apps, you can decompress the contents of an archive by using DeflateStream or GZipStream, or you can use the Windows ランタイムWindows Runtime types Compressor and Decompressor to compress and decompress files.

プロパティ

Archive

エントリが属する zip アーカイブを取得します。Gets the zip archive that the entry belongs to.

CompressedLength

zip アーカイブ内のエントリの圧縮サイズを取得します。Gets the compressed size of the entry in the zip archive.

Crc32

32 ビットの巡回冗長検査。The 32-bit Cyclic Redundant Check.

ExternalAttributes

OS およびアプリケーション固有のファイル属性。OS and application specific file attributes.

FullName

zip アーカイブ内のエントリの相対パスを取得します。Gets the relative path of the entry in the zip archive.

LastWriteTime

zip アーカイブのエントリが最後に変更されたときを取得または設定します。Gets or sets the last time the entry in the zip archive was changed.

Length

zip アーカイブ内のエントリの非圧縮サイズを取得します。Gets the uncompressed size of the entry in the zip archive.

Name

zip アーカイブ内のエントリのファイル名を取得します。Gets the file name of the entry in the zip archive.

メソッド

Delete()

zip アーカイブからエントリを削除します。Deletes the entry from the zip archive.

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判定します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
Open()

zip のアーカイブからエントリを開きます。Opens the entry from the zip archive.

ToString()

zip アーカイブ内のエントリの相対パスを取得します。Retrieves the relative path of the entry in the zip archive.

拡張メソッド

ExtractToFile(ZipArchiveEntry, String)

zip アーカイブのエントリをファイルに抽出します。Extracts an entry in the zip archive to a file.

ExtractToFile(ZipArchiveEntry, String, Boolean)

zip アーカイブ内のエントリをファイルに抽出して、必要に応じて、同じ名前を持つ既存のファイルを上書きします。Extracts an entry in the zip archive to a file, and optionally overwrites an existing file that has the same name.

適用対象