가끔은 100GB 영역에서 많은 양의 데이터를 압축하려고합니다. 내가 작성한 루틴을 실행할 때 파일이 이전 크기와 정확히 같은 크기로 나오면 나타납니다. 다른 사람이 GZipStream에이 문제가 있습니까?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 바이트 원시 파일의 시작 부분에 쓸 수 있습니다. Writeblock의 값은 32kb (32768 바이트)입니다. fromStream은이 인스턴스에서는 FileStream에서 데이터를 가져 오는 스트림입니다. 압축 된 데이터의 8 바이트가 문제의 원인이 될까요?
가 작은 파일에 코드를 사용할 수 있습니까? –
코드가 올바르게 데이터를 압축하는지 확인할 수 있습니까? 예를 들어 일반적으로 잘 압니다. ... – Nik