2014-03-02 4 views
5

Ich habe ZIP-Datei mit folgenden interner Struktur:Wie extrahiert man nur das spezifische Verzeichnis aus einem Zip-Archiv in C# .NET 4.5?

file1.txt 
directoryABC 
    fileA.txt 
    fileB.txt 
    fileC.txt 

Was wäre der beste Weg, um Dateien von „directoryABC“ -Ordner zu einem Zielort auf der Festplatte zu extrahieren? Zum Beispiel, wenn Zielposition ist „C: \ temp“, dann sollte ihr Inhalt sein:

temp 
    directoryABC 
     fileA.txt 
     fileB.txt 
     fileC.txt 

auch in bestimmten Situationen möge ich würde nur Inhalt des „directoryABC“ zu extrahieren, so wäre das Ergebnis:

temp 
    fileA.txt 
    fileB.txt 
    fileC.txt 

Wie kann ich erreichen dies, indem Klassen von System.IO.Compression in C# .NET 4.5 verwenden?

Antwort

6

Dies ist eine weitere Version, die Dateien eines bestimmten Verzeichnisses in das Zielverzeichnis zu extrahieren ...

class Program 
{ 
    static object lockObj = new object(); 

    static void Main(string[] args) 
    { 
     string zipPath = @"C:\Temp\Test\Test.zip"; 
     string extractPath = @"c:\Temp\xxx"; 
     string directory = "testabc"; 
     using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
     { 
      var result = from currEntry in archive.Entries 
         where Path.GetDirectoryName(currEntry.FullName) == directory 
         where !String.IsNullOrEmpty(currEntry.Name) 
         select currEntry; 


      foreach (ZipArchiveEntry entry in result) 
      { 
       entry.ExtractToFile(Path.Combine(extractPath, entry.Name)); 
      } 
     } 
    }   
} 
+0

Beachten Sie, dass, um tu 'verwenden ZipFile' die Verwendung ist' System.IO.Compression' aber Die benötigte Assembly ist 'System.IO.Compression.FileSystem'. Die [Dokumentation] (https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile.aspx) heißt es richtig, aber ich hatte Probleme diese zu finden. –