Utwórz ZIP w C#

Archiwa ZIP służą do kompresji i przechowywania jednego lub więcej plików lub folderów w jednym kontenerze. Archiwum ZIP hermetyzuje pliki i foldery, a także przechowuje informacje o ich metadanych. Najczęstszym zastosowaniem archiwizacji jest zmniejszanie rozmiaru plików do przechowywania lub przesyłania oraz stosowanie szyfrowania dla bezpieczeństwa. Oprócz narzędzi do kompresji plików, funkcje automatycznej kompresji/wyodrębniania są również używane w różnych aplikacjach komputerowych i internetowych do przesyłania, pobierania, udostępniania lub szyfrowania plików. Ten artykuł dotyczy również podobnych scenariuszy i przedstawia kilka prostych sposobów kompresowania plików lub folderów oraz programowego tworzenia archiwów ZIP przy użyciu C#.

W tym artykule dowiesz się, jak wykonać następujące operacje archiwizacji ZIP:

Biblioteka C# ZIP

Aspose.ZIP for .NET to potężne i łatwe w użyciu API do kompresowania lub rozpakowywania plików i folderów w aplikacjach .NET. Zapewnia również techniki szyfrowania AES do szyfrowania plików w formacie ZIP w języku C#. Możesz zainstalować API z NuGet lub pobrać jego pliki binarne z sekcji Downloads.

Utwórz archiwum ZIP w C#

Poniżej przedstawiono kroki, aby skompresować plik, dodając go do archiwum ZIP:

Poniższy przykładowy kod pokazuje, jak dodać plik do archiwum ZIP przy użyciu języka C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Plik do dodania do archiwum
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Dodaj plik do archiwum
			archive.CreateEntry("alice29.txt", source1);
			// plik zip
			archive.Save(zipFile);
		}
	}
}

Dodaj wiele plików do archiwum ZIP w C#

Jeśli chcesz dodać wiele plików do archiwum ZIP, możesz to zrobić, korzystając z jednego z następujących sposobów.

C# ZIP Wiele plików przy użyciu FileStream

W tej metodzie klasa FileStream służy do dodawania plików do archiwum ZIP za pomocą metody Archive.CreateEntry(String, FileStream). Poniższy przykładowy kod pokazuje, jak dodać wiele plików do pliku ZIP w języku C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Plik do dodania do archiwum
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Plik do dodania do archiwum
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Dodaj pliki do archiwum
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// Spakuj pliki
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP Wiele plików przy użyciu FileInfo

Możesz także użyć klasy FileInfo do dodania wielu plików do archiwum ZIP. W tej metodzie pliki zostaną załadowane przy użyciu klasy FileInfo i dodane do archiwum ZIP przy użyciu metody Archive.CreateEntry(String, FileInfo). Poniższy przykładowy kod pokazuje, jak skompresować wiele plików przy użyciu klasy FileInfo w języku C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Pliki do dodania do archiwum
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Dodaj pliki do archiwum
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Utwórz archiwum ZIP
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

Pliki ZIP przy użyciu ścieżki

Zamiast używać klas FileInfo lub FileStream dla wpisów ZIP, możesz podać ścieżkę pliku bezpośrednio do metody Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). Poniższy przykładowy kod pokazuje, jak zapisywać pliki ZIP przy użyciu ich ścieżki.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Utwórz archiwum
    using (var archive = new Archive())
    {
        // Dodaj plik do archiwum ZIP
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Dodaj foldery do archiwum ZIP w C#

Możesz spakować folder za pomocą biblioteki C# ZIP, co może być kolejną alternatywą dodawania wielu plików do archiwum ZIP. Po prostu umieść pliki źródłowe w folderze i dodaj ten folder do archiwum ZIP. Poniżej przedstawiono kroki spakowania folderu w języku C#:

Poniższy przykładowy kod pokazuje, jak dodać folder do pliku ZIP w języku C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Folder do spakowania
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Utwórz archiwum ZIP
		archive.Save(zipFile);
	}
}

Utwórz ZIP chroniony hasłem za pomocą ZipCrypto w C#

Możesz chronić archiwa ZIP za pomocą haseł i zastosować szyfrowanie ZipCrypto. W tym celu w konstruktorze Archive używana jest klasa ArchiveEntrySettings, która jako drugi parametr akceptuje typ szyfrowania.

Poniższy przykładowy kod pokazuje, jak utworzyć archiwum ZIP chronione hasłem przy użyciu ZipCrypto w języku C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Dodaj folder do archiwum
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Utwórz archiwum ZIP
		archive.Save(zipFile);
	}
}

C# Utwórz chroniony hasłem plik ZIP z szyfrowaniem AES

Aspose.ZIP for .NET pozwala również zastosować szyfrowanie AES w celu ochrony archiwów ZIP. Możesz użyć następujących metod szyfrowania AES:

  • AES128
  • AES192
  • AES256

Aby zastosować szyfrowanie AES, API oferuje klasę AesEcryptionSettings. Poniższy przykładowy kod pokazuje, jak utworzyć chroniony hasłem plik ZIP z szyfrowaniem AES w języku C#.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Dodaj folder do archiwum
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Utwórz archiwum ZIP
		archive.Save(zipFile);
	}
}

Ustaw tryb kompresji równoległej

Możesz także skonfigurować interfejs API do kompresji równoległej w przypadku wielu wpisów. W tym celu można określić tryb kompresji równoległej za pomocą klasy ParallelOptions. Aspose.ZIP for .NET udostępnia następujące tryby kompresji równoległej.

  • Nigdy — nie kompresuj równolegle.
  • Zawsze — kompresuj równolegle (uwaga na brak pamięci).
  • Auto — Zdecyduj, czy chcesz stosować kompresję równoległą dla wpisów, czy nie. Ta opcja może kompresować niektóre wpisy tylko równolegle.

Poniższy przykładowy kod pokazuje, jak ustawić tryb kompresji równoległej podczas kompresowania wielu plików za pomocą biblioteki Aspose C# ZIP.

// Aby uzyskać pełne przykłady i pliki danych, przejdź do 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);
                //Zdefiniuj kryterium równoległości
                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"
                    });
            }
        }
    }
}

Dowiedz się więcej o bibliotece C# .NET ZIP

Dowiedz się więcej o naszym C# ZIP API, korzystając z następujących zasobów:

Twórz archiwa ZIP online

Możesz także wypróbować naszą bezpłatną aplikację online, która jest oparta na Aspose.ZIP for .NET, aby skompresować pliki do archiwów ZIP.

Wniosek

W tym artykule nauczyłeś się, jak programowo tworzyć archiwa ZIP w języku C#. Przykłady kodu pokazały, jak dodawać pliki i foldery w archiwach ZIP. Ponadto omówiliśmy również, jak tworzyć archiwa ZIP chronione hasłem za pomocą metod szyfrowania ZipCrypto i AES przy użyciu biblioteki ZIP C# Aspose. Na końcu omówiono również równoległą kompresję wielu wpisów. Jeśli masz jakieś pytania lub wątpliwości, możesz je zadać za pośrednictwem naszego forum.

Zobacz też

Unrar lub wyodrębnij pliki przy użyciu C#Rozpakuj pliki w archiwach ZIP przy użyciu języka C#Tworzenie archiwów 7z (7-Zip) w języku C# .NET
Otwórz lub wyodrębnij plik 7z (7zip) w języku C# .NETTworzenie i wyodrębnianie archiwów GZip przy użyciu języka C#Konwertuj pliki RAR do archiwum ZIP w języku C#
Konwertuj archiwa ZIP na TAR w C#Tworzenie płaskiego archiwum ZIP w języku C#Tworzenie wykonywalnego samorozpakowującego się archiwum w języku C#
Tworzenie plików TAR.GZ i TAR.XZ w języku C#Usuń pliki w archiwum ZIP w języku C#Wyodrębnij zagnieżdżone archiwa ZIP w języku C#
Scal wiele archiwów ZIP lub TAR w języku C#