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