Oppure

Loading
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:

 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.

Perché? Decomprime troppo velocemente? Se si, come posso/potrei risolvere? Grazie in anticipo! D: :k:
Ultima modifica effettuata da Roldex 30/12/13 20:46
aaa
26/12/13 21:08
nessuno
Guarda il codice d'esempio in

msdn.microsoft.com/it-it/library/…(v=vs.110).aspx

e riscrivi il codice senza il vettore ma usando il metodo CopyTo (sia per la compressione sia per la decompressione)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/12/13 21:46
Roldex
Ma CopyTo non è utilizzabile nel Framework 3.0???
aaa
26/12/13 22:47
nessuno
E' utilizzabile dal 4.0 in poi ... ma non avevi detto con quale fmwk stai lavorando ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/12/13 9:18
Roldex
Perché però con il metodo descritto da Piero Tofy non è possibile decomprimere il File? :-|
aaa
27/12/13 14:43
nessuno
Perché hai sbagliato a scrivere la parte della decompressione, in particolare devi leggere dallo Zip non devi scrivere ... e così via ... rivedi il codice.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
30/12/13 20:45
Roldex
Ho modificato completamente il Post principale con miglioramento NETTO del codice... Con un piccolissimo errore nella decompressione! Grazie a chi mi aiuterà a risolvere :D
aaa