Я пытаюсь сжать большой объем данных, иногда около 100 ГБ, когда я запускаю написанную мной процедуру, кажется, что файл получается точно такого же размера, как и предыдущий размер. У кого-нибудь еще была эта проблема с GZipStream?
Мой код выглядит следующим образом:
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();
StreamSize — это 8-байтовое значение UInt64, которое содержит размер файла. я пишу эти 8 байт в необработанном виде в начало файла, поэтому я знаю исходный размер файла. Блок записи имеет значение 32 КБ (32768 байт). fromStream — это поток, из которого берутся данные, в данном случае FileStream. Могут ли 8 байт перед сжатыми данными вызвать проблему?