2017-03-29 1 views

Antwort

0

Sie können es ohne externe Abhängigkeit tun. In System.IO.Compression.dll und es verwenden, wie diese

using (var client = new System.Net.Http.HttpClient()) 
using (var stream = client.GetStreamAsync("https://github.com/frictionlessdata/specs/archive/master.zip").Result) 
{ 
    var basepath = Path.Combine(Path.GetTempPath() + "myzip"); 
    System.IO.Directory.CreateDirectory(basepath); 

    var ar = new System.IO.Compression.ZipArchive(stream, System.IO.Compression.ZipArchiveMode.Read); 
    foreach (var entry in ar.Entries) 
    { 
     var path = Path.Combine(basepath, entry.FullName); 

     if (string.IsNullOrEmpty(entry.Name)) 
     { 
      System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path)); 
      continue; 
     } 

     using (var entryStream = entry.Open()) 
     { 
      System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path)); 
      using (var file = File.Create(path)) 
      { 
       entryStream.CopyTo(file); 
      } 
     } 
    } 
} 

Sie können Httpclient ersetzen durch WebClient oder Httprequest, wenn Sie wollen.

Wenn Sie nur eine Datei zu extrahieren, ersetzen foreach (var entry in ar.Entries) durch:

var entry = ar.Entries.FirstOrDefault(e => e.FullName.EndWith("myFile.txt")); 
if(entry == null) 
    return; 
+0

Dank für Antwort, aber wenn ich will Extrahieren und Herunterladen einzelner Dateien aus diesem Repository? das ist was ich meine – patrycze

+0

Sie können nicht eine einzelne Datei extrahieren, ohne die gesamte Zip-Datei herunterzuladen. Anstatt alle Einträge in der Zip-Datei zu durchlaufen, wählen Sie einfach den gesuchten Eintrag aus (zB: mit linq). Ich werde meine Antwort aktualisieren. – Kalten

Verwandte Themen