Skapa ZIP i C#

ZIP-arkiven används för att komprimera och behålla en eller flera filer eller mappar i en enda behållare. Ett ZIP-arkiv kapslar in filerna och mapparna samt innehåller deras metadatainformation. Den vanligaste användningen av arkivering är att minska storleken på filerna för lagring eller överföring och att använda kryptering för säkerhet. Förutom filkomprimeringsverktygen används de automatiska komprimerings-/extraheringsfunktionerna också inom olika skrivbords- och webbapplikationer för att ladda upp, ladda ner, dela eller kryptera filerna. Den här artikeln riktar sig också mot liknande scenarier och presenterar några enkla sätt att komprimera filer eller mappar och skapa ZIP-arkiv programmatiskt med C#.

I den här artikeln kommer du att lära dig hur du utför följande ZIP-arkiveringsoperationer:

C# ZIP-bibliotek

Aspose.ZIP för .NET är ett kraftfullt och lättanvänt API för att zippa eller packa upp filer och mappar i .NET-applikationer. Det tillhandahåller också AES-krypteringstekniker för att kryptera filerna i ZIP i C#. Du kan installera API:t från NuGet eller ladda ner dess binärfiler från avsnittet Nedladdningar.

Skapa ett ZIP-arkiv i C#

Följande är stegen för att komprimera en fil genom att lägga till den i ett ZIP-arkiv:

Följande kodexempel visar hur man lägger till en fil i ett ZIP-arkiv med C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// Fil som ska läggas till i arkivet
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// Lägg till filen i arkivet
			archive.CreateEntry("alice29.txt", source1);
			// Zip fil
			archive.Save(zipFile);
		}
	}
}

Lägg till flera filer i ZIP-arkivet i C#

Om du vill lägga till flera filer i ett ZIP-arkiv kan du göra det på något av följande sätt.

C# ZIP Flera filer med FileStream

I den här metoden används klassen FileStream för att lägga till filer i ZIP-arkivet med metoden Archive.CreateEntry(String, FileStream). Följande kodexempel visar hur man lägger till flera filer i en ZIP i C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Fil som ska läggas till i arkivet
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// Fil som ska läggas till i arkivet
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// Lägg till filer i arkivet
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// ZIP-filerna
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# ZIP Flera filer med FileInfo

Du kan också använda klassen FileInfo för att lägga till flera filer i ett ZIP-arkiv. I den här metoden kommer filerna att laddas med klassen FileInfo och läggas till i ZIP-arkivet med metoden Archive.CreateEntry(String, FileInfo). Följande kodexempel visar hur du zippar flera filer med klassen FileInfo i C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// Filer som ska läggas till i arkivet
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// Lägg till filer i arkivet
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// Skapa ZIP-arkiv
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

ZIP-filer med sökväg

Istället för att använda FileInfo- eller FileStream-klasser för ZIP-posterna kan du ange filens sökväg direkt till metoden Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). Följande kodexempel visar hur man ZIP-filer använder deras sökväg.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // Skapa arkiv
    using (var archive = new Archive())
    {
        // Lägg till filen i ZIP-arkivet
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

Lägg till mappar till ett ZIP-arkiv i C#

Du kan ZIP en mapp med C# ZIP-bibliotek, vilket kan vara ett annat alternativ för att lägga till flera filer i ett ZIP-arkiv. Lägg bara källfilerna i en mapp och lägg till den mappen i ZIP-arkivet. Följande är stegen för att zippa en mapp i C#:

Följande kodexempel visar hur man lägger till en mapp till ZIP i C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// Mapp som ska bli zippad
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Skapa ZIP-arkiv
		archive.Save(zipFile);
	}
}

Skapa ett lösenordsskyddat ZIP med ZipCrypto i C#

Du kan skydda ZIP-arkiven med lösenord och använda ZipCrypto-kryptering. För detta används klassen ArchiveEntrySettings i konstruktorn för Archive som accepterar krypteringstypen som den andra parametern.

Följande kodexempel visar hur man skapar ett lösenordsskyddat ZIP-arkiv med ZipCrypto i C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// Lägg till mapp till arkivet
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Skapa ZIP-arkiv
		archive.Save(zipFile);
	}
}

C# Skapa lösenordsskyddad ZIP med AES-kryptering

Aspose.ZIP för .NET låter dig också använda AES-kryptering för att skydda ZIP-arkiven. Du kan använda följande AES-krypteringsmetoder:

  • AES128
  • AES192
  • AES256

För att tillämpa AES-kryptering erbjuder API klassen AesEcryptionSettings. Följande kodexempel visar hur man skapar ett lösenordsskyddat ZIP med AES-kryptering i C#.

// Skapa FileStream för utdata ZIP-arkiv
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// Lägg till mapp i arkivet
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// Skapa ZIP-arkiv
		archive.Save(zipFile);
	}
}

Ställ in läge för parallellkomprimering

Du kan också konfigurera API:et för parallell komprimering vid flera poster. För detta kan du ange det parallella komprimeringsläget med klassen ParallelOptions. Aspose.ZIP för .NET tillhandahåller följande parallella komprimeringslägen.

  • Aldrig - Komprimera inte parallellt.
  • Alltid - Komprimera parallellt (se upp för minnet).
  • Auto - Bestäm om du vill använda parallell komprimering eller inte på posterna. Det här alternativet kan endast komprimera vissa poster parallellt.

Följande kodexempel visar hur du ställer in parallellt komprimeringsläge medan du zippar flera filer med Asposes C# ZIP-bibliotek.

// För fullständiga exempel och datafiler, gå till 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);
                //Definiera parallellitetskriteriet
                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"
                    });
            }
        }
    }
}

Lär dig mer om C# .NET ZIP Library

Utforska mer om vårt C# ZIP API med hjälp av följande resurser:

Gör ZIP-arkiv online

Du kan också prova vår gratis onlineapplikation, som är baserad på Aspose.ZIP för .NET, för att komprimera filer till ZIP-arkiv.

Slutsats

I den här artikeln har du lärt dig hur du skapar ZIP-arkiv programmatiskt i C#. Kodexemplen har visat hur man lägger till filer och mappar i ZIP-arkiven. Dessutom har vi också täckt hur man skapar lösenordsskyddade ZIP-arkiv med ZipCrypto- och AES-krypteringsmetoder med hjälp av C# Asposes ZIP-bibliotek. Parallell komprimering av flera poster diskuteras också i slutet. Om du skulle ha några frågor eller funderingar kan du fråga oss via vårt forum.

Se även

Unrar eller extrahera filer med C#Packa upp filer i ZIP-arkiv med C#Skapa 7z (7-Zip) arkiv i C# .NET
Öppna eller extrahera 7z (7zip) fil i C# .NETSkapa och extrahera GZip-arkiv med C#Konvertera RAR-filer till ZIP-arkiv i C#
Konvertera ZIP-arkiv till TAR i C#Skapa ett platt ZIP-arkiv i C#Skapa körbart självextraherande arkiv i C#
Skapa TAR.GZ- och TAR.XZ-filer i C#Ta bort filer i ett ZIP-arkiv i C#Extrahera kapslade ZIP-arkiv i C#
Slå samman flera ZIP- eller TAR-arkiv i C#Hur man skapar ZIP-filerExtrahera 7z Online