Zip-Komprimierung und -Dekomprimierung können in .NET auf verschiedene Arten erreicht werden: 1. Verwendung des Programms System.IO.Packaging; 2. Verwendung einer Klassenbibliothek eines Drittanbieters; 3. Hinzufügen neuer Funktionen in System.IO.Compression; Namespace ZipArchive, ZipFile-Klasse usw. implementieren
Verwenden Sie zunächst das Programm System.IO.Packaging zum Komprimieren und Dekomprimieren
Paket ist eine abstrakte Klasse, die zum Organisieren von Objekten in einer einzigen definierten Klasse verwendet werden kann physisches Format Entität, wodurch Portabilität und effizienter Zugriff ermöglicht werden. ZIP-Dateien sind das wichtigste physische Format von Paketen. Andere Paketimplementierungen verwenden möglicherweise andere physische Formate wie XML-Dokumente, Datenbanken oder Webdienste. Ähnlich wie bei einem Dateisystem werden in einem Paket enthaltene Elemente in hierarchisch organisierten Ordnern und Dateien referenziert Die Methode verwendet standardmäßig die abgeleitete Klasse System.IO.Packaging. Wenn Sie sie verwenden, müssen Sie einen Verweis auf WindowsBase hinzufügen. Komprimieren Sie den gesamten Ordner
Code ///
///Fügen Sie einen Ordner und seine Unterordner zusammen mit einem Paket hinzu
///
, Zeichenfolge komprimierter Dateiname, Boolescher Wert.
Boolesches Ergebnis = FALSE; 🎜> overrideExisting && File.Exists(compressedFileName)) if
{
, FileMode.Create))
{ .EnumerateFiles(folder name, "*", SearchOption.AllDirectories);
foreach (string Dateiname in Dateiliste)
Der Unterordner nach dem Namen
String pathInPackage;
Uri partUriDocument = PackUriHelper.CreatePartUri(new URI(pathInPackage, UriKind.Relative));
PackagePart packagePartDocument = package.CreatePart (partUriDocument,"",CompressionOption.Maximum); FileStream FILESTREAM = new FileStream(FileName, FileMode .Open, FileAccess.Read))
> 🎜> Ergebnis = True; Ordnername des Ordners +, E);
in eine ZIP-Datei als Containerspeicher
// /
param name = "compressedFileName">Datei archivieren
/// Vorhandene Datei überschreiben //
static boolean PackageFile(String filename, String compressedFileName, boolean overrideExisting) ists( Dateiname)! )
Versuchen Sie es
Verwenden Sie (Package = Package.Open(compressedFileName, FileMode.OpenOrCreate))
package.DeletePart(partUriDocument);
PackagePart packagePartDocument = package.CreatePart(partUri Dokument, „“,CompressionOption. Maximum);
Using (FileStream FILESTREAM = new FileStream(FileName, FileMode.Open, FileAccess.Read))
Code ///
/// / param> erstellt werden Datei & lt;/ param & gt;DirectoryInfo.Create();
using (Package = Package.Open(compressedFileName, FileMode.Open, FileAccess.Read)) PackagePart of PackagePart in package.GetParts ())
Ausnahme 5)
Rückgabeergebnisse;
}
Statisch ungültiger ExtractPart (PackagePart of PackagePart, Strings TargetDirectory, Burrideexisting)
{
String Stringpart = TargetDirectory RLDECODE (packagepart.uri.tostring ()) Ersatz (' \', ' /').
If (Directory.Exists(Path.GetDirectoryName(stringPart))!)
Directory.CreateDirectory(Path.GetDirectoryName(stringPart));
If (!overrideExisting && File.Exists (stringPart))
.GetStream()CopyTo FROM(FILESTREAM).
.
Code XML-Version="1.0" Kodierung="UTF-8"? >
1. SharpZipLib, auch bekannt als „#ziplib“, basiert auf GPL Open Source und unterstützt die Komprimierung und Dekomprimierung von ZIP, GZIP einschließlich tar und BZip2-Komprimierung.
Unterstützt .NET 1.1, .NET 2.0 (3.5, 4.0).
(1) ZIP-Komprimierung
Codepublic static invalid zip (String SRCFILE, String DstFile, int buffer size)
{
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess.Read);
FileStream fileStreamOut = new FileStream
(DstFile, FileMode.Create, FileAccess.Write);
ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut) ; buffer = new Bytes
size = fileStreamIn.Read(buffer, 0, buffer.Length);
zipOutStream.Write(buffer, 0, size); .Close();
fileStreamOut.Close();
fileStreamIn.Close();
} (2) Unzip zipCode public static invalid Unzip(String SRCFILE, String DstFile, int buffer size)
{
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess.Read);
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
FileStream fileStreamOut = new FileStream
(DstFile + @"" + enter.Name, FileMode.Create, FileAccess.Write) ;
int size;
buffer = new bytes
do
{
size = zipInStream.Read(buffer, 0, buffer.Length);
} while (size > 0);
zipInStream.Close();
fileStreamIn.Close(); 2. DotNetLib basiert auf „WS-PL“ Open Source relativ einfach zu verwenden (1) Verwendung des Komprimierungscodes (zip using ZipFile = new ZipFile())
{
zip.AddFile("readme.txt"); png");
zip.AddFile("2008_Annual_Report.pdf");
zip. Save("Archive.zip");
} (2) Unzip Codeprivate invalid MyExtract()
{
String zipToUnpack = "C1P3SML.zip";
String unpackDirectory = "Entpacken Sie die Datei ”;
Verwenden Sie (ZIP1 using ZipFile = ZipFile.Read(zipToUnpack))
{
//Hier, Wir extrahieren jeden Eintrag, können aber
bedingt extrahieren, basierend auf Eintragsname, Größe, Datum, Kontrollkästchenstatus usw. //
foreach (E von ZipEntry in ZIP1)
}
}
}
3. Verwenden Sie ZipArchive, ZipFile und andere Klassen zum Komprimieren und Dekomprimieren in .NET 4.5
Der Hauptcode ist statisch ungültig (String [] args)
{String NEWFILE = @"C:User exampleuser NewFile.txt"
Using (ZipArchive archive = ZipFile.Open(ZipPath, ZipArchiveMode.Update))
.CreateEntryFromFile(NEWFILE "NewEntry .txt");
Archive.ExtractToDirectory(ExtractPath);