GZipStream для больших данных

Я пытаюсь сжать большой объем данных, иногда около 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 байт перед сжатыми данными вызвать проблему?

5
задан Skintkingle 16 May 2012 в 15:29
поделиться