2012-08-08 16 views
5

In C#, sto usando il DotNetZip Ho un zip chiamato "innerZip.zip" che contiene alcuni dati, e un altro zip chiamato "outerZip.zip" che contiene innerZip. perché lo sto facendo in questo modo? bene, quando si imposta la password, la password si applica effettivamente alle singole voci che vengono aggiunte all'archivio e non all'intero archivio, utilizzando questa combo interno/esterno, Posso impostare un passaggio all'intero zip interno perché è una voce di quello esterno.Ottenere un "Impossibile leggere come file zip" Eccezione durante il tentativo di ottenere un flusso da un file zip interno (un Zip all'interno di un altro zip)

Il problema è che, beh, il codice parla meglio delle parole normali:

ZipFile outerZip = ZipFile.Read("outerZip.zip"); 
outerZip.Password = "VeXe"; 
Stream innerStream = outerZip["innerZip.zip"].OpenReader(); 
ZipFile innerZip = ZipFile.Read(innerStream); // I'm getting the exception here. 
innerZip["Songs\\IronMaiden"].Extract(tempLocation); 

perché mi appare questa eccezione? il file interno è un file zip, quindi non dovrei ottenere quell'eccezione giusto? c'è un modo per aggirare questo o devo solo estrarre quello interno dall'esterno, e quindi accedervi?

Grazie in anticipo ..

risposta

6

Questa eccezione si verifica perché il flusso CrcCalculatorStream che OpenReader crea non è ricercabile, e ZipFile.Read(Stream) cerca di cercare durante l'apertura del file zip.

La natura della compressione zip impedisce la ricerca di una posizione nel contenuto compresso, il contenuto deve essere decompresso in ordine.

Un modo per aggirare questo sarebbe estrarre il file zip interno a MemoryStream e quindi caricarlo tramite ZipFile.Read.

MemoryStream ms = new MemoryStream(); 
outerZip["innerZip.zip"].Extract(ms); 
ms.Seek(0, SeekOrigin.Begin); 
ZipFile innerZip = ZipFile.Read(ms); 
innerZip["Songs\\IronMaiden"].Extract(tempLocation); 
+1

So che questo post è un po 'datato. Ma grazie per il suggerimento! Ha salvato un collega delle mie ore di manipolazione! +1 –

Problemi correlati