26/12/13 20:44
Roldex
Allora ragazzi... Visto e considerato che il metodo di compressione che stavo utilizzando prima era tutto errato ho cercato di crearne di un nuovo.....
A questo punto mi è venuto in mente di Creargli un piccolo programmino strutturato così:
i40.tinypic.com/…
Open and Convert apri un file e lo converte in Array di Bytes in codesto modo:
E quindi ottengo anche la lunghezza del File in Byte su un Label...
Poi con compress... Utilizzando il codice seguente....
Ottengo comunque la lunghezza del File Compresso nel label...
E per decomprimere poi con:
Però mi genera un errore alla riga: read = gzip.Read(buff, 0, buff.Length)
dicendomi:
Perché? Decomprime troppo velocemente? Se si, come posso/potrei risolvere? Grazie in anticipo! D:
A questo punto mi è venuto in mente di Creargli un piccolo programmino strutturato così:
i40.tinypic.com/…
Open and Convert apri un file e lo converte in Array di Bytes in codesto modo:
Dim OpenFileDialog1 As New OpenFileDialog OpenFileDialog1.ShowDialog() x = OpenFileDialog1.FileName Dim fInfo As New FileInfo(x) Dim numBytes As Long = fInfo.Length Dim fStream As New FileStream(x, FileMode.Open, FileAccess.Read) Dim br As New BinaryReader(fStream) data = br.ReadBytes(CInt(numBytes)) Label1.Text = Convert.ToString("Length: " & data.Length) br.Close() fStream.Close()
E quindi ottengo anche la lunghezza del File in Byte su un Label...
Poi con compress... Utilizzando il codice seguente....
Public Shared Function Compress(ByVal data As Byte()) As Byte() Dim i As Int32 = 0 Dim output As MemoryStream = New MemoryStream Dim gzip As GZipStream = New GZipStream(output, CompressionMode.Compress, True) Dim len As Int32 = data.Length If len >= 8000 Then While i <= len gzip.Write(data, 0, 4096) i += 4096 End While gzip.Close() Else gzip.Write(data, 0, data.Length) gzip.Close() End If Return output.ToArray End Function
Ottengo comunque la lunghezza del File Compresso nel label...
E per decomprimere poi con:
Public Shared Function Decompress(data As Byte()) As Byte() Dim input As New MemoryStream() input.Write(data, 0, data.Length) input.Position = 0 Dim gzip As New GZipStream(input, CompressionMode.Decompress, True) Dim output As New MemoryStream() Dim buff As Byte() = New Byte(63) {} Dim read As Integer = -1 read = gzip.Read(buff, 0, buff.Length) While read > 0 output.Write(buff, 0, read) read = gzip.Read(buff, 0, buff.Length) End While gzip.Close() Return output.ToArray() End Function
Però mi genera un errore alla riga: read = gzip.Read(buff, 0, buff.Length)
dicendomi:
Eccezione non gestita di tipo 'System.IO.InvalidDataException' in System.dll
Ulteriori informazioni: Il numero chiave nell'intestazione GZip non è corretto. Verificare che il flusso passato sia di tipo GZip.
Ulteriori informazioni: Il numero chiave nell'intestazione GZip non è corretto. Verificare che il flusso passato sia di tipo GZip.
Perché? Decomprime troppo velocemente? Se si, come posso/potrei risolvere? Grazie in anticipo! D:
Ultima modifica effettuata da Roldex 30/12/13 20:46
aaa