Einzelne Datei aus einem ZIP-Archiv löschen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Einzelne Datei aus einem ZIP-Archiv löschen

    Hallo Leute,

    ZIP Archive aus einem Ordner (mit Unterordnern) erstellen und wieder zurück entpacken ist nicht das Problem. Entsprechende Codeschnipsel findet man überall im Netz.

    Ich stand nun aber vor der Aufgabe einzelne Dateien aus einem ZIP-Archiv zu entfernen. Im Speziellen die mit der Endung .exe, .dll und .msi.
    Zuerst war dieser Eintrag als Frage gedacht, ich bin jedoch im Laufe des Postings selbst drauf gekommen.

    Folgenden Code habe ich mir dafür zurechtgeschrieben, welchen ich Euch nicht vorenthalten möchte:
    Sollte er es "wert" sein, dann bitte in die Tips & Tricks verschieben.

    VB.NET-Quellcode

    1. Dim zipPath As String ="c:\test.zip"
    2. Dim Zaehler As Integer = 0
    3. Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update) 'ZipFile.OpenRead(zipPath)
    4. Dim GefundeneDatei(archive.Entries.Count + 1) As Boolean
    5. For Each entry As ZipArchiveEntry In archive.Entries
    6. If entry.FullName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) Or entry.FullName.EndsWith(".msi", StringComparison.OrdinalIgnoreCase) Or entry.FullName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) Then
    7. 'entry.Delete() 'würde eine Fehlermeldung bringen, da die Each Schleife neu initialisiert würde
    8. GefundeneDatei(Zaehler) = True
    9. End If
    10. Zaehler += 1
    11. Next
    12. 'Hier alle gefundenen Dateieinträge durchgehen und löschen
    13. 'Durch das Löschen verschiebt sich der entry-Wert um eines nach oben (negativ).
    14. Dim DateiIndex As Integer = 1
    15. For i As Integer = 1 To Zaehler
    16. If GefundeneDatei(i) = True Then
    17. 'MsgBox(archive.Entries(DateiIndex).FullName)
    18. archive.Entries(DateiIndex).Delete()
    19. Else
    20. DateiIndex += 1
    21. End If
    22. Next i
    23. End Using

    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    probierts auch mal so:

    VB.NET-Quellcode

    1. Dim zipPath As String = "c:\test.zip"
    2. Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
    3. With archive.Entries
    4. For i = .Count - 1 To 0 Step -1
    5. With .item(i)
    6. If .name.EndsWith(".exe") OrElse .name.endswith("dll") Then
    7. .delete()
    8. End If
    9. End With
    10. Next
    11. End With
    12. End Using
    (ungetestet)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Danke für die (funktionierende) Kurzform :thumbsup:
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at