2013-03-17 4 views
9

Ich verwende die Standard-VB.NET-Bibliotheken zum Extrahieren und Komprimieren von Dateien. Es funktioniert auch, aber das Problem kommt, wenn ich extrahieren muss und Dateien bereits existieren.System.IO.Compression und ZipFile - extrahieren und überschreiben

-Code verwende ich

Importe:

Imports System.IO.Compression 

Methode nenne ich, wenn es

ZipFile.ExtractToDirectory(archivedir, BaseDir) 

ArchiveDir und BaseDir werden ebenfalls eingestellt abstürzt, in der Tat funktioniert es, wenn es keine Dateien überschreiben. Das Problem kommt genau dann, wenn es da ist.

Wie kann ich Dateien in Extraktion ohne Verwendung von Third-Part-Bibliotheken überschreiben?

(Anmerkung Ich verwende als Referenz System.IO.Compression und System.IO.Compression.Filesystem)

Da die Dateien in mehreren Ordnern gehen bereits vorhandene Dateien mit würde ich vermeiden manuelle

IO.File.Delete(..) 

Antwort

11

Verwenden ExtractToFile mit als wahr überschreiben eine vorhandene Datei zu überschreiben, die den gleichen Namen wie die Zieldatei gefunden

Dim zipPath As String = "c:\example\start.zip" 
    Dim extractPath As String = "c:\example\extract" 

    Using archive As ZipArchive = ZipFile.OpenRead(zipPath) 
     For Each entry As ZipArchiveEntry In archive.Entries 
      entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), True) 
     Next 
    End Using 
+0

Scheint mehr zu arbeiten, aber es funktioniert jetzt nicht für dumme Systemdateien wie "Thumbs.db", die Ausführung und Überschreiben fehlschlagen lassen. Irgendwelche Ideen? – user1714647

+1

Ein weiteres Problem: Es scheint nicht zu kopieren Datei, wenn der Ordner, der sie enthalten muss nicht existiert. – user1714647

+0

Ich würde vorschlagen, benutzerdefinierte ZIP-Logik zu verwenden und alle unerwünschten Dateien wie "Thumbs.db" zu entfernen; für die zweite benutze nächsten Code Wenn IO.Directory.Exists (Pfad) = False Dann IO.Directory.CreateDirectory (Pfad) – volody

6

ich folgende Umset hat mentation arbeitete voll und ganz, um die oben beschriebenen Probleme zu lösen, lief ohne Fehler und überschrieb erfolgreich vorhandene Dateien und erstellte Verzeichnisse nach Bedarf.

 ' Extract the files - v2 
     Using archive As ZipArchive = ZipFile.OpenRead(fullPath) 
      For Each entry As ZipArchiveEntry In archive.Entries 
       Dim entryFullname = Path.Combine(ExtractToPath, entry.FullName) 
       Dim entryPath = Path.GetDirectoryName(entryFullName) 
       If (Not (Directory.Exists(entryPath))) Then 
        Directory.CreateDirectory(entryPath) 
       End If 

       Dim entryFn = Path.GetFileName(entryFullname) 
       If (Not String.IsNullOrEmpty(entryFn)) Then 
        entry.ExtractToFile(entryFullname, True) 
       End If 
      Next 
     End Using 
Verwandte Themen