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 Functionquesta è 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 Subprocedura per chiudere lo streamcodice: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 Subcon questa estraggo su un file temporaneo e lo lancio per la visualizzazione

Rispondi quotando