2017-03-29 1 views

Répondre

0

Vous pouvez le faire sans dépendance externe. Ajouter System.IO.Compression.dll et l'utiliser comme ceci

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); 
      } 
     } 
    } 
} 

Vous pouvez remplacer HttpClient par WebClient ou HttpRequest si vous voulez.

Si vous voulez extraire un seul fichier, remplacez foreach (var entry in ar.Entries) par:

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

merci pour la réponse, mais si je veux extraire et télécharger un seul fichier de ce référentiel? c'est ce que je veux dire – patrycze

+0

Vous ne pouvez pas extraire un seul fichier sans télécharger le fichier zip entier. Au lieu de parcourir toutes les entrées du fichier zip, sélectionnez simplement l'entrée que vous recherchez (ex: avec linq). Je vais mettre à jour ma réponse. – Kalten