Sto tentando di comprimere una grande quantità di dati, a volte nell'area di 100 GB, quando eseguo la routine che ho scritto sembra che il file esca esattamente della stessa dimensione della dimensione precedente. Qualcun altro ha avuto questo problema con GZipStream?GZipStream su dati di grandi dimensioni
Il mio codice è il seguente:
byte[] buffer = BitConverter.GetBytes(StreamSize);
FileStream LocalUnCompressedFS = File.OpenWrite(ldiFileName);
LocalUnCompressedFS.Write(buffer, 0, buffer.Length);
GZipStream LocalFS = new GZipStream(LocalUnCompressedFS, CompressionMode.Compress);
buffer = new byte[WriteBlock];
UInt64 WrittenBytes = 0;
while (WrittenBytes + WriteBlock < StreamSize)
{
fromStream.Read(buffer, 0, (int)WriteBlock);
LocalFS.Write(buffer, 0, (int)WriteBlock);
WrittenBytes += WriteBlock;
OnLDIFileProgress(WrittenBytes, StreamSize);
if (Cancel)
break;
}
if (!Cancel)
{
double bytesleft = StreamSize - WrittenBytes;
fromStream.Read(buffer, 0, (int)bytesleft);
LocalFS.Write(buffer, 0, (int)bytesleft);
WrittenBytes += (uint)bytesleft;
OnLDIFileProgress(WrittenBytes, StreamSize);
}
LocalFS.Close();
fromStream.Close();
Lo streamsize è un valore UInt64 di 8 byte che contiene la dimensione del file. scrivo questi 8 byte crudi all'inizio del file in modo da conoscere la dimensione del file originale. Writeblock ha il valore di 32kb (32768 byte). fromStream è lo stream per prelevare dati da, in questo caso, da FileStream. Gli 8 byte di fronte ai dati compressi causeranno un problema?
funziona il vostro codice su file più piccoli? –
Puoi confermare che il tuo codice comprime correttamente dataset più piccoli - un file di testo, ad esempio, sai che normalmente si comprime bene ... – Nik