essayer d'extraire des fichiers dans un dossier donné en ignorant le chemin dans le zipfile, mais il ne semble pas y avoir de moyen.
Ceci semble une exigence assez fondamentale donnée à toutes les autres bonnes choses mises en œuvre là-bas. P >
Qu'est-ce que je manque? p>
code est - p>
4 Réponses :
Vous devrez supprimer la partie répertoire du nom de fichier juste avant de décompresser ...
using (var zf = Ionic.Zip.ZipFile.Read(zipPath)) { zf.ToList().ForEach(entry => { entry.FileName = System.IO.Path.GetFileName(entry.FileName); entry.Extract(appPath); }); }
Pourquoi ZF.Tolist (). Foreach (entrée => {...}) code> au lieu de
foreach (entrée varié dans zf.entries) {} code>? Y a-t-il une différence?
Cela échouera s'il y a 2 fichiers avec des noms de fichiers égaux. Par exemple Fichiers \ supplémentairesFiles \ File1.txt temp \ file1.txt p>
premier fichier sera renommé à File1.txt dans le fichier ZIP et lorsque le deuxième fichier tente d'être renommé une exception est lancé en disant qu'un élément de la même clé existe déjà p>
Bien que vous ne puissiez pas le spécifier pour un appel spécifique à extraire () code> ou
extrayant () code>, la classe
zipfile code> a un < Code> FlattenfoldSonExtract code> champ. Lorsqu'il est défini sur true, il aplatit tous les fichiers extraits dans un dossier:
Cela devrait être la réponse acceptée ( DONTNEZIP DOC A >). L'autre réponse est une solution de contournement: elle renomme le fichier à l'intérieur du zip avant de l'extraire.
Vous pouvez utiliser la surcharge qui prend un flux en tant que paramètre. De cette façon, vous avez le contrôle total du chemin où les fichiers seront extraits.
Exemple: P>
using (ZipFile zip = new ZipFile(ZipPath)) { foreach (ZipEntry e in zip) { string newPath = Path.Combine(FolderToExtractTo, e.FileName); if (e.IsDirectory) { Directory.CreateDirectory(newPath); } else { using (FileStream stream = new FileStream(newPath, FileMode.Create)) e.Extract(stream); } } }
Merci, cela a travaillé! J'ai continué à obtenir "un élément avec la même clé a déjà été ajouté" des erreurs avec celle marquée comme réponse (peut-être une erreur de ma part, mais de toute façon).
Je cherche une solution similaire mais je voudrais seulement supprimer la première étape de tous les fichiers contenus ... par exemple / ma solution / fichier / fichier1.txt devient /file/file1.txt. Toute ressource pour cela?
Découvrez Stackoverflow.com/Questtions/6202267/... @atwellpub