quelqu'un sait comment je pourrais faire ça? J'ai essayé de refaire ce code mais ça ne marche pas. Unpack a zip using ZipInputStream (eg for Unseekable input streams)comment puis-je télécharger et extraire un seul fichier de http en utilisant sharpziplib dans C#?
Répondre
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;
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
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
Vous devez télécharger le fichier complet, l'enregistrer comme un fichier local ou un magasin dans un MemoryStream –