Ho un sacco di file ZIP che hanno un disperato bisogno di una riorganizzazione ed estrazione gerarchica. Quello che posso fare, attualmente, è creare la struttura delle directory e spostare i file zip nella posizione corretta. Il formaggio mistico che mi manca è la parte che estrae i file dall'archivio ZIP.Estrazione di file da un archivio Zip utilizzando C# e System.IO.Packaging
Ho visto gli articoli MSDN sulla classe ZipArchive
e li ho capiti ragionevolmente bene. Ho anche visto lo VBScript ways to extract. Questa non è una classe complessa, quindi estrarre le cose dovrebbe essere piuttosto semplice. In effetti, funziona "per lo più". Ho incluso il mio codice attuale sotto per riferimento.
using (ZipPackage package = (ZipPackage)Package.Open(@"..\..\test.zip", FileMode.Open, FileAccess.Read))
{
PackagePartCollection packageParts = package.GetParts();
foreach (PackageRelationship relation in packageParts)
{
//Do Stuff but never gets here since packageParts is empty.
}
}
Il problema sembra essere da qualche parte nel GetParts
(o Get Tutto per questo). Sembra che il pacchetto, mentre è aperto, sia vuoto. Scavando più in profondità il debugger mostra che il membro privato _zipArchive mostra che in realtà ha parti. Parti con i nomi giusti e tutto. Perché la funzione GetParts
non li recupera? Ho provato a trasmettere l'open a ZipArchive e questo non ha aiutato. Grrr.
FYI, Ho inviato una richiesta su MS Connect per aggiungere supporto per archivio ZIP generico. Puoi votare anche su https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=477393 –