File Zip creato con Ziplib non è valido

martedì 27 marzo 2007 - 15.21

epiccoli Profilo | Newbie

Buongiorno a tutti !
Vi scrivo nella speranza che qualcuno mi sappia aiutare... Ho utilizzato in un mio progetto la libreria ICSharpCode.SharpZipLib.zip per creare alcuni file zip contenenti diversi file. Ci sono però delle volte che il file zip mi risulta essere danneggiato e che quindi non riesca più ad aprirmelo correttamente. Nel codice non ottengo nessun codice di errore che mi indichi quale possa essere il motivo e quindi per me è andato tutto a buon fine. Il problema è che sembra non esserci una 'regola' e che capiti a caso.
A qualcuno è già successo ??? Mi sapete aiutare ?? Ormai sono sulla soglia di una crisi di nervi...

Ciao,
Emanuela

munissor Profilo | Senior Member

Prova a controllare se hai richiamato Close o Dispose sugli stream interessati....

Ciao!

epiccoli Profilo | Newbie

Ciao, grazie mille per la risposta.
Ti riporto il codice che uso:


Dim s As ZipOutputStream
Dim strZipFileName As String = zipname

s = New ZipOutputStream(File.Create(strZipFileName))

For Each FileSel In arrFiles

NomeFileApp = FileSel.Name
FilePDF = DirFilePdf & "\" & NomeFileApp

Dim fs As FileStream = File.OpenRead(DirFilePdf & "\" & NomeFileApp)
Dim buffer(fs.Length) As Byte
fs.Read(buffer, 0, buffer.Length)

Dim myEntry As New ZipEntry(NomeFileApp)

s.PutNextEntry(myEntry)
s.Write(buffer, 0, buffer.Length)
s.CloseEntry()

Next

'chiudo l'oggetto ZipOutputStream
s.Finish()
s.Close()


Alla fine utilizzo il Close. Secondo te c'è qualcos altro che manca o c'è qualche errore ?
Ti ringrazio per l'aiuto.

Emanuela

munissor Profilo | Senior Member

Il codice sembrerebbe ok. L'unico dubbio che ancora mi rimane è se lo ZipStream chiude il FileStream che tu gli hai passato.
Prova per sicurezza a chiudere anche quello in modo esplicito.

In caso hai provato con versioni diverse di SharpZipLib?


PS: per correttezza dovresti chiudere anche fs una volta che hai finito di utilizzarlo, altrimenti rimane aperto fino a quando il GC decide di finalizzarlo..

Dim fs As FileStream = File.OpenRead(DirFilePdf & "\" & NomeFileApp)
Dim buffer(fs.Length) As Byte
fs.Read(buffer, 0, buffer.Length)

fs.Close()
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5