ZipArchive Klass

Definition

Representerar ett paket med komprimerade filer i zip-arkivformatet.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Arv
ZipArchive
Implementeringar

Exempel

Det första exemplet visar hur du skapar en ny post och skriver till den med hjälp av en dataström.

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

I följande exempel visas hur du öppnar ett zip-arkiv och itererar genom samlingen med poster.

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

Det tredje exemplet visar hur du använder tilläggsmetoder för att skapa en ny post i ett zip-arkiv från en befintlig fil och extrahera arkivinnehållet. Du måste referera till System.IO.Compression.FileSystem sammansättningen för att köra koden.

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

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\users\exampleuser\start.zip";
            string extractPath = @"c:\users\exampleuser\extract";
            string newFile = @"c:\users\exampleuser\NewFile.txt";

            using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
            {
                archive.CreateEntryFromFile(newFile, "NewEntry.txt");
                archive.ExtractToDirectory(extractPath);
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = "c:\users\exampleuser\end.zip"
        Dim extractPath As String = "c:\users\exampleuser\extract"
        Dim newFile As String = "c:\users\exampleuser\NewFile.txt"

        Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
            archive.CreateEntryFromFile(newFile, "NewEntry.txt", CompressionLevel.Fastest)
            archive.ExtractToDirectory(extractPath)
        End Using
    End Sub

End Module

Kommentarer

Metoderna för att manipulera zip-arkiv och deras filposter är spridda över tre klasser: ZipFile, ZipArchiveoch ZipArchiveEntry.

Till Använd
Skapa ett zip-arkiv från en katalog ZipFile.CreateFromDirectory
Extrahera innehållet i ett zip-arkiv till en katalog ZipFile.ExtractToDirectory
Lägga till nya filer i ett befintligt zip-arkiv ZipArchive.CreateEntry
Hämta en fil från ett zip-arkiv ZipArchive.GetEntry
Hämta alla filer från ett zip-arkiv ZipArchive.Entries
Öppna en dataström till en enda fil som finns i ett zip-arkiv ZipArchiveEntry.Open
Ta bort en fil från ett zip-arkiv ZipArchiveEntry.Delete

När du skapar en ny post komprimeras filen och läggs till i zip-paketet. Med CreateEntry metoden kan du ange en kataloghierarki när du lägger till posten. Du inkluderar den relativa sökvägen för den nya posten i zip-paketet. Om du till exempel skapar en ny post med en relativ sökväg AddedFolder\NewFile.txt skapar du en komprimerad textfil i en katalog med namnet AddedFolder.

Om du refererar till sammansättningen System.IO.Compression.FileSystem i projektet, du kan komma åt fyra tilläggsmetoder (från klassen ZipFileExtensions) för klassen ZipArchive: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String) och ExtractToDirectory(ZipArchive, String, Boolean) (finns i .NET Core 2.0 och senare versioner). Med dessa tilläggsmetoder kan du komprimera och dekomprimera innehållet i posten till en fil. Sammansättningen System.IO.Compression.FileSystem är inte tillgänglig för Windows 8.x Store-appar. I Windows 8.x Store-appar kan du komprimera och dekomprimera filer med hjälp av klassen DeflateStream eller GZipStream eller använda Windows Runtime typerna Compressor och Decompressor.

Konstruktorer

Name Description
ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Initierar en ny instans av ZipArchive klassen på den angivna strömmen för det angivna läget, använder den angivna kodningen för postnamn och lämnar eventuellt strömmen öppen.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Initierar en ny instans av ZipArchive klassen på den angivna strömmen för det angivna läget, och om du vill kan du lämna strömmen öppen.

ZipArchive(Stream, ZipArchiveMode)

Initierar en ny instans av ZipArchive klassen från den angivna strömmen och med det angivna läget.

ZipArchive(Stream)

Initierar en ny instans av ZipArchive klassen från den angivna strömmen.

Egenskaper

Name Description
Entries

Hämtar samlingen med poster som för närvarande finns i zip-arkivet.

Mode

Hämtar ett värde som beskriver vilken typ av åtgärd zip-arkivet kan utföra på poster.

Metoder

Name Description
CreateEntry(String, CompressionLevel)

Skapar en tom post som har det angivna postnamnet och komprimeringsnivån i zip-arkivet.

CreateEntry(String)

Skapar en tom post som har den angivna sökvägen och postnamnet i zip-arkivet.

Dispose()

Frigör de resurser som används av den aktuella instansen ZipArchive av klassen.

Dispose(Boolean)

Anropas av Dispose() metoderna och Finalize() för att frigöra de ohanterade resurser som används av den aktuella instansen ZipArchive av klassen, och du kan också avsluta skrivning av arkivet och släppa de hanterade resurserna.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetEntry(String)

Hämtar en omslutning för den angivna posten i zip-arkivet.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Tilläggsmetoder

Name Description
CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Arkiverar en fil genom att komprimera den med den angivna komprimeringsnivån och lägga till den i zip-arkivet.

CreateEntryFromFile(ZipArchive, String, String)

Arkiverar en fil genom att komprimera den och lägga till den i zip-arkivet.

ExtractToDirectory(ZipArchive, String, Boolean)

Extraherar alla filer i arkivet till en katalog i filsystemet.

ExtractToDirectory(ZipArchive, String)

Extraherar alla filer i zip-arkivet till en katalog i filsystemet.

Gäller för

Se även