2017-06-21 7 views
1

Comment décompresser (.zip) des fichiers sans les extraire à un nouvel emplacement dans l'infrastructure .net? Spécifiquement, j'essaye de lire un filename.csv.zip dans un DataTable. Je suis conscient de .extractToDirectory (qui est dans ZipArchive) mais je veux juste l'extraire dans un objet dans C# et je ne voudrais pas créer un nouveau fichier. En espérant pouvoir faire ceci sans bibliothèques de tiers, mais je prendrai ce que je peux obtenir.Comment décompresser les fichiers .zip dans C# sans les extraire au nouvel emplacement

+0

ZipArchiveEntry.Open() vous donne un objet Stream vous permettant de lire les données décompressées d'une entrée d'archive Zip. – elgonzo

Répondre

1

Peut être quelques bugs parce que je jamais testé, mais là, vous allez:

List<byte[]> urmom = new List<byte[]>(); 
using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
    foreach (ZipArchiveEntry entry in archive.Entries) 
     using (StreamReader r = new StreamReader(entry.Open())) 
       urmom.Add(r.ReadToEnd(entry)); 

Fondamentalement, vous utilisez la classe OpenRead du ZipArchive à itérer chaque entrée. À ce stade, vous pouvez utiliser le lecteur de flux pour lire chaque entrée. De là, vous pouvez créer un fichier à partir du flux et même lire le nom de fichier si vous le souhaitez. Mon code ne fait pas ça, un peu de paresse de ma part.