ZIP in C# erstellen

Die ZIP archiv werden verwendet, um eine oder mehrere Dateien oder Ordner in einem einzigen Container zu komprimieren und zu speichern. Ein ZIP Archiv kapselt die Dateien und Ordner sowie ihre Metadateninformationen. Die häufigste Anwendung der Archivierung besteht darin, die Größe der Dateien für die Speicherung oder Übertragung zu reduzieren und aus Sicherheitsgründen eine Verschlüsselung anzuwenden. Abgesehen von den Dateikomprimierungstools werden die automatisierten Komprimierungs-/Extraktionsfunktionen auch in verschiedenen Desktop und Webanwendungen zum Hochladen, Herunterladen, Teilen oder Verschlüsseln der Dateien verwendet. Dieser Artikel zielt auch auf ähnliche Szenarien ab und stellt einige einfache Möglichkeiten zum Komprimieren von Dateien oder Ordnern und zum programmgesteuerten Erstellen von ZIP Archiven mit C# vor.

In diesem Artikel erfahren Sie, wie Sie die folgenden ZIP Archivierungsvorgänge durchführen:

C# ZIP Bibliothek

Aspose.ZIP for .NET ist eine leistungsstarke und benutzerfreundliche API zum Komprimieren oder Entpacken von Dateien und Ordnern in .NET Anwendungen. Es bietet auch AES Verschlüsselungstechniken zum Verschlüsseln der Dateien in ZIP in C#. Sie können die API von NuGet installieren oder ihre Binärdateien aus dem Abschnitt Downloads herunterladen.

Erstellen Sie ein ZIP Archiv in C#

Im Folgenden sind die Schritte zum Komprimieren einer Datei durch Hinzufügen zu einem ZIP Archiv aufgeführt:

Das folgende Codebeispiel zeigt, wie Sie mit C# eine Datei zu einem ZIP Archiv hinzufügen.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Datei, die dem Archiv hinzugefügt werden soll
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Datei zum Archiv hinzufügen
			archive.CreateEntry("alice29.txt", source1);
			// zip Datei
			archive.Save(zipFile);
		}
	}
}

Mehrere Dateien zum ZIP Archiv in C# hinzufügen

Falls Sie mehrere Dateien zu einem ZIP Archiv hinzufügen möchten, können Sie dies auf eine der folgenden Arten tun.

Mehrere C# ZIP Dateien mit FileStream

In dieser Methode wird die FileStream Klasse verwendet, um Dateien mit der methode Archive.CreateEntry(String, FileStream) zum ZIP Archiv hinzuzufügen. Das folgende Codebeispiel zeigt, wie mehrere Dateien zu einer ZIP Datei in C# hinzugefügt werden.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Datei, die dem Archiv hinzugefügt werden soll
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Datei, die dem Archiv hinzugefügt werden soll
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Dateien zum Archiv hinzufügen
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP die Dateien
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

Mehrere C# ZIP Dateien mit FileInfo

Sie können auch die Klasse FileInfo verwenden, um mehrere Dateien zu einem ZIP Archiv hinzuzufügen. Bei dieser Methode werden die Dateien mit der Klasse FileInfo geladen und mit der methode Archive.CreateEntry(String, FileInfo) zum ZIP Archiv hinzugefügt. Das folgende Codebeispiel zeigt, wie mehrere Dateien mithilfe der FileInfo Klasse in C# gezippt werden.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Dateien, die dem Archiv hinzugefügt werden sollen
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Dateien zum Archiv hinzufügen
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// ZIP Archiv erstellen
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

ZIP Dateien mit Pfad

Anstatt FileInfo oder FileStream Klassen für die ZIP-Einträge zu verwenden, können Sie den Pfad der Datei direkt an die Methode Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings) übergeben. Das folgende Codebeispiel zeigt, wie Dateien mithilfe ihres Pfads gezippt werden.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Archiv erstellen
    using (var archive = new Archive())
    {
        // Datei zum ZIP Archiv hinzufügen
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Ordner zu einem ZIP Archiv in C# hinzufügen

Sie können auch einen Ordner komprimieren, was eine weitere Alternative zum Hinzufügen mehrerer Dateien zu einem ZIP Archiv sein könnte. Legen Sie einfach die Quelldateien in einen Ordner und fügen Sie diesen Ordner dem ZIP Archiv hinzu. Im Folgenden sind die Schritte zum Zippen eines Ordners aufgeführt:

Das folgende Codebeispiel zeigt, wie Sie in C# einen Ordner zu ZIP hinzufügen.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Ordner zum komprimieren
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ZIP Archiv erstellen
		archive.Save(zipFile);
	}
}

Erstellen Sie eine passwortgeschützte ZIP Datei mit ZipCrypto in C#

Sie können die ZIP Archive mit Passwörtern schützen und ZipCrypto Verschlüsselung anwenden. Dazu wird im Konstruktor des Archive die Klasse ArchiveEntrySettings verwendet, die den Verschlüsselungstyp als zweiten Parameter akzeptiert.

Das folgende Codebeispiel zeigt, wie Sie mit ZipCrypto in C# ein kennwortgeschütztes ZIP Archiv erstellen.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Ordner zum Archiv hinzufügen
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ZIP Archiv erstellen
		archive.Save(zipFile);
	}
}

C# Passwortgeschützte ZIP Datei mit AES Verschlüsselung erstellen

Mit Aspose.ZIP for .NET können Sie auch AES Verschlüsselung anwenden, um die ZIP Archive zu schützen. Sie können die folgenden AES Verschlüsselungsmethoden verwenden:

  • AES128
  • AES192
  • AES256

Um die AES Verschlüsselung anzuwenden, bietet API die Klasse AesEcryptionSettings an. Das folgende Codebeispiel zeigt, wie Sie eine kennwortgeschützte ZIP Datei mit AES Verschlüsselung in C# erstellen.

// FileStream für Ausgabe-ZIP-Archiv erstellen
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Ordner zum Archiv hinzufügen
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// ZIP Archiv erstellen
		archive.Save(zipFile);
	}
}

Stellen Sie den parallelen Komprimierungsmodus ein

Sie können die API auch für parallele Komprimierung bei mehreren Einträgen konfigurieren. Dazu können Sie den parallelen Komprimierungsmodus mit der Klasse ParallelOptions angeben. Aspose.ZIP for .NET bietet die folgenden parallelen Komprimierungsmodi.

  • Nie - Nicht parallel komprimieren.
  • Immer - Parallel komprimieren (Achtung: Speichermangel).
  • Auto - Entscheiden Sie, ob die Einträge parallel komprimiert werden sollen oder nicht. Diese Option kann einige Einträge nur parallel komprimieren.

Das folgende Codebeispiel zeigt, wie Sie den parallelen Komprimierungsmodus festlegen, während Sie mehrere Dateien mit der C# ZIP Bibliothek von Aspose komprimieren.

// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
    using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive())
            {
                archive.CreateEntry("alice29.txt", source1);
                archive.CreateEntry("asyoulik.txt", source2);
                //Definieren Sie das Parallelitätskriterium
                var parallelOptions = new ParallelOptions
                {
                    ParallelCompressInMemory = ParallelCompressionMode.Always
                };
                archive.Save(zipFile,
                    new ArchiveSaveOptions()
                    {
                        ParallelOptions = parallelOptions,
                        Encoding = Encoding.ASCII,
                        ArchiveComment = "There are two poems from Canterbury corpus"
                    });
            }
        }
    }
}

Erfahren Sie mehr über die C# .NET ZIP Bibliothek

Erfahren Sie mehr über unsere C# ZIP API mithilfe der folgenden Ressourcen:

Fazit

In diesem Artikel haben Sie gelernt, wie Sie ZIP Archive programmgesteuert in C# erstellen. Die Codebeispiele haben gezeigt, wie Dateien und Ordner in den ZIP Archiven hinzugefügt werden. Darüber hinaus haben wir auch behandelt, wie Sie passwortgeschützte ZIP Archive mit ZipCrypto und AES Verschlüsselungsmethoden unter Verwendung der ZIP Bibliothek von C# Aspose erstellen. Daneben wird am Ende auch auf die parallele Komprimierung mehrerer Einträge eingegangen. Falls Sie Fragen oder Anregungen haben, können Sie uns diese über unser Forum stellen.

Siehe auch