Im nachfolgenden Modul sind Funktionen enthalten, mit denen man ZIP-Files erstellen, entpacken und/oder einzelne Files herauslösen kann. Auf die Anwendung bin ich gestoßen, weil ich sehr verschieden große Bilder/Grafiken geeignet gesammelt zusammenstellen wollte, und zwar nicht in einer ImageList, und weil die Bilder auch ohne Programmänderung austauschbar sein sollten. Natürlich sind noch andere Anwendungen möglich. Ich zeige hier die Funktionen:
Es hat sich erwiesen, dass beim Speichern von Files in ein ZipFile, deutsche Umlaute nicht übernommen werden, sodass beim Rücklesen eine Umwandlung von Zeichen in Umlaute erfolgen muss. Die Funktionen sind bzgl. File-Filter anpassbar. Die Anwendung der Funktionen erfordert die Verweise: System.IO.Compression, System.IO.Compression.FileSystem Hier der Code: Imports System.IO Imports System.IO.Compression ' erfordert Verweise: System.IO.Compression, System.IO.Compression.FileSystem Module dhmodZipFiles ' Verwendung von ZIP-Files (komprimieren, extrahieren) ' beachten der Umlaute in File-Namen Dim umlChrw() As String = {"Ä", "ä", "Ö", "ö", "Ü", "ü"} Dim umlAscw() As Integer = {381, 8222, 8482, 8221, 353, 129} ''' <summary> ''' Gesamten Inhalt eines Ordners in einem Zip-Archiv komprimieren und extrahieren, ''' dann Inhalt an einen neuen Ordner ''' </summary> ''' <param name="startPath">der Pfad der zu komprimierenden Files</param> ''' <param name="zipPath">der vollständige Pfad für das ZIP-File</param> ''' <param name="extractPath">der vollständige Pfad für zu extrahierende Files</param> Public Sub TestZip(startPath As String, zipPath As String, extractPath As String) ' Beispiel: ' startPath = "c:examplestart" ' zipPath = "c:exampleresult.zip" ' extractPath = "c:exampleextract" ZipFile.CreateFromDirectory(startPath, zipPath) ZipFile.ExtractToDirectory(zipPath, extractPath) End Sub ''' <summary> ''' ein einzelnes File vom ZIP-File extrahieren und speichern in Ordner ''' </summary> ''' <param name="zipPath">der vollständige Pfad des ZIP-Files</param> ''' <param name="extractPath">der Zielpfad für das extrahierte File</param> ''' <param name="filename">der Name des zu extrahierenden Files</param> ''' <returns>den Namen des extrahierten Files</returns> Public Function ExtractFileFromZip(zipPath As String, extractPath As String, filename As String) As String Dim changeName As String Using archive As ZipArchive = ZipFile.OpenRead(zipPath) For Each entry As ZipArchiveEntry In archive.Entries changeName = chgFileNameUml(entry.FullName) If entry.FullName = filename Then entry.ExtractToFile(Path.Combine(extractPath, changeName), True) Exit For End If Next End Using Return filename End Function ''' <summary> ''' alle Files vom Typ Extension extrahieren und in einen Ordner speichern ''' </summary> ''' <param name="zipPath">der vollständige Pfad des ZIP-Files</param> ''' <param name="extractPath">der Zielpfad für die extrahierten Files</param> ''' <param name="fileExt">die Extension als Filter zur File-Auswahl</param> Public Sub ExtractAllFilesFromZip(zipPath As String, extractPath As String, Optional fileExt As String = "*") Dim changeName As String, w As Boolean w = (fileExt = "*") Using archive As ZipArchive = ZipFile.OpenRead(zipPath) For Each entry As ZipArchiveEntry In archive.Entries If w Then changeName = chgFileNameUml(entry.FullName) If Not FileExists(If(changeName = "", entry.FullName, changeName)) Then entry.ExtractToFile(Path.Combine(extractPath, If(changeName = "", entry.FullName, changeName))) End If Else If entry.FullName.EndsWith(fileExt, StringComparison.OrdinalIgnoreCase) Then changeName = chgFileNameUml(entry.FullName) If Not FileExists(If(changeName = "", entry.FullName, changeName)) Then entry.ExtractToFile(Path.Combine(extractPath, If(changeName = "", entry.FullName, changeName))) End If End If End If Next End Using End Sub ''' <summary> ''' alle File-Namen vom Typ Extension in einem Array zurückgeben ''' </summary> ''' <param name="zipPath">der vollständige Pfad des ZIP-Files</param> ''' <param name="fileExt">die Extension als Filter zur File-Auswahl</param> ''' <returns>das Array der File-Namen</returns> Public Function ExtractAllFileNamesFromZip(zipPath As String, Optional fileExt As String = "*") As String() Dim namesArr() As String, i As Short, changeName As String, w As Boolean w = (fileExt = "*") Using archive As ZipArchive = ZipFile.OpenRead(zipPath) For Each entry As ZipArchiveEntry In archive.Entries If w Then changeName = chgFileNameUml(entry.FullName) i += 1 ReDim Preserve namesArr(i) namesArr(i) = changeName Else If entry.FullName.EndsWith(fileExt, StringComparison.OrdinalIgnoreCase) Then changeName = chgFileNameUml(entry.FullName) i += 1 ReDim Preserve namesArr(i) namesArr(i) = changeName End If End If Next End Using Return namesArr End Function ''' <summary> ''' Entry.Fullname ändern, wenn deutsche Umlaute enthalten ''' </summary> ''' <param name="theEntryName">der Entry-Punkt-Fullname im ZIP-File</param> ''' <returns>den geänderten Namen</returns> Private Function chgFileNameUml(theEntryName As String) As String Dim a, ix As Integer, chgName As String chgName = "" For i As Short = 0 To theEntryName.Length - 1 a = AscW(theEntryName.Substring(i, 1)) ix = umlAscw.IndexOf(umlAscw, a) If ix >= 0 Then chgName = theEntryName.Replace(theEntryName.Substring(i, 1), umlChrw(ix)) End If Next Return If(chgName = "", theEntryName, chgName) End Function End Module Viel Erfolg damit! Dieser Tipp wurde bereits 9.146 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |