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:
- Skapa ett ZIP-arkiv med C#
- Lägg till flera filer i ett ZIP-arkiv
- Lägg till mappar i ett ZIP-arkiv
- Skapa ett lösenordsskyddat ZIP-arkiv med ZipCrypto
- Kryptera ZIP-arkiv med AES-kryptering
- Ställ in parallellt komprimeringsläge
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:
- Skapa ett FileStream-objekt för utdata-zip-arkivet.
- Öppna källfilen i ett FileStream-objekt.
- Skapa ett objekt av klassen Arkiv.
- Lägg till filen i arkivet med metoden Archive.CreateEntry(string, FileStream).
- Skapa ZIP-arkivet med metoden Archive.Save(FileStream).
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#:
- Skapa ett objekt av klassen FileStream för utdata-zip-arkivet.
- Skapa en instans av klassen Arkiv.
- Använd klassen DirectoryInfo för att ange mappen som ska zippas.
- Använd metoden Archive.CreateEntries(DirectoryInfo) för att lägga till mapp i ZIP.
- Skapa ZIP-arkivet med metoden Archive.Save(FileStream).
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.