Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB.NET] file compresso con GZipStream

    ciao, ho un dilemma e non ne vengo fuori..
    praticamente ho dei dati da salvare su disco e per non occupare tanta memoria ho deciso di comprimerli tutti in un file con la classe GZipStream e un timer che ogni n secondi chiama la procedura di compressione(vedi sotto).. mi ritrovo sul disco il file .gz contenente i dati compressi.. lo apro con winrar e tutto risulta apposto..cosa strana, se invece lo si apre tramite codice (vedasi procedura sotto), mancano abbondantemente i dati aggiunti in un secondo momento..(proprio nel caso in cui chiudo e riapro lo stream di compressione tramite codice) eppure con winrar mi fa vedere tutti i dati salvati

    di seguito il codice in formato test

    codice:
    Private Stream_F_Destinazione As FileStream = Nothing, FileZip As GZipStream = Nothing,
              File_Destinazione As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "Prova.csv.gz")
    
    Public Function Salva_Compresso(Optional ChiudiFlusso As Boolean = False) As Boolean Try ' creazione degli stream Dim Buffer As Byte() = New System.Text.UTF8Encoding(True).GetBytes(String.Format("*******[Now.ToString]={0}{1}", Now.ToString, vbCrLf)) 'se non aperto, apro un stream per il file di destinazione(zip) If Stream_F_Destinazione Is Nothing Then Stream_F_Destinazione = New FileStream(File_Destinazione, FileMode.Append, FileAccess.Write) 'se non inizializzato, inizializzo il file compresso If FileZip Is Nothing Then FileZip = New GZipStream(Stream_F_Destinazione, CompressionMode.Compress, True) 'Scrivo nel file compresso i dati letti precedentemente messi in buffer FileZip.Write(Buffer, 0, Buffer.Length) Catch ex As ApplicationException MsgBox("Errore: " & ex.Message) Return False Finally If ChiudiFlusso Then FileZip_Close() End Try : Return True End Function
    questa è la procedura per la compressione dei dati su file: (**in Fase di test salva solo data e ora corrente)
    codice:
        Private Sub FileZip_Close()
            If FileZip IsNot Nothing Then FileZip.Close() : FileZip = Nothing
            If Stream_F_Destinazione IsNot Nothing Then Stream_F_Destinazione.Close() : Stream_F_Destinazione = Nothing
        End Sub
    
    procedura per chiudere lo stream
    codice:
        Sub FileZiped_ProcessStart()
            FileZip_Close() 'chiudi eventuali streams aperti
            Dim TMP_File As String = FileIO.FileSystem.CombinePath(FileIO.SpecialDirectories.Temp, "Prova.csv")
            Using _StreamOrigine As New FileStream(File_Destinazione, FileMode.Open, FileAccess.Read, FileShare.Read)
                Using _StreamDest As New FileStream(TMP_File, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)
                    Using _fileZip As New GZipStream(_StreamOrigine, CompressionMode.Decompress, True)
                        _fileZip.CopyTo(_StreamDest)
                        _fileZip.Close() : _fileZip.Dispose()
                    End Using : _StreamDest.Close() : _StreamDest.Dispose()
                End Using : _StreamOrigine.Close() : _StreamOrigine.Dispose()
            End Using : Process.Start(TMP_File) 'visualizzo il file estratto
        End Sub
    
    con questa estraggo su un file temporaneo e lo lancio per la visualizzazione
    Ultima modifica di michelecali; 01-10-2019 a 17:28
    Michele

  2. #2
    riprendo questo post..vorrei sapere se con vb.net ci sono altri modi funzionanti per ottenere lo stesso risultato.. praticamente mi serve un solo file compresso e di poter aggiungere altri dati in un secondo momento! soluzioni?
    Michele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.