Heim  >  Artikel  >  Backend-Entwicklung  >  Komprimierung und Dekomprimierung von Zip in .NET

Komprimierung und Dekomprimierung von Zip in .NET

巴扎黑
巴扎黑Original
2016-12-19 16:35:232122Durchsuche

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
///
Ordnername">Ordner hinzufügen /// Vorhandene Datei überschreiben
                                                                                                                                           , 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 /// ///Die Postleitzahl des Extraktbehälters. Hinweis: Der Container muss als Open Packaging Convention (OPC)-Spezifikation
/// / 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
/>
>

Ähnlich , wenn die komprimierte Datei nicht die .xml-Datei von [Inhalt] enthält oder die .xml-Datei von [Inhalt] nicht die Beschreibung der entsprechenden Erweiterung enthält (manuell hinzugefügtes [Inhalt] .xml ist auch möglich), die Die Datei wird nicht dekomprimiert. Zweitens umfasst die Komprimierung und Dekomprimierung mithilfe der Bibliothekskomprimierung von Drittanbietern SharpZipLib und DotNetZip.

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);

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn