수분 동안 내 압축 해제가 정상적으로 작동했습니다!gzipstream은 UNIX 파일을 압축 해제합니다. 오류없이 파일을 중단합니다.
하지만 지금은 몇 가지 읽은 후 압축을 풀면서 일부 파일이 중단됩니다.
압축 해제는 694 레코드 후에 중단되지만 1'829'768 레코드가 있습니다!
GZipStream에서 오류 메시지가 나타나지 않습니다.
두렵지 만 문제는 코드가 아니라 Microsoft의 GZipStream에있는 버그 또는 누락 된 기능입니다.
파일이 일부 UNIX 환경을 사용하여 압축되었다고 가정합니다.
나는 WinRar 또는 ZIP을 사용하여 쉘에서 압축을 풀 수 있지만 GZipStream을 사용하여 "on-the-fly"압축을 풀 수는 없습니다.
처음 압축을 풀고 나중에 처리하는 것은 물론 가능하지만 옵션이 아닙니다. 일부 파일이 크기 때문입니다. (테라 바이트). 이것은 많은 시간 낭비입니다.
using System;
using System.Data;
using System.IO;
using System.IO.Compression;
public static void Unpack(string p_sZippedFileName)
{
const int cRecordLenght = 986;
byte[] ba = new byte[cRecordLenght];
int iRecordCounter = 0;
using (FileStream fileStream = new FileStream(p_sZippedFileName, FileMode.Open, FileAccess.Read))
using (GZipStream zipStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
while (zipStream.Read(ba, 0, cRecordLenght) != 0)
{
iRecordCounter++;
}
Console.WriteLine("\nfinished after " + iRecordCounter.ToString() + " records ");
}
}
static void Main(string[] args)
{
Unpack(@"MyGzFile.gz");
}
압축 파일의 크기는 15MB이고 압축되지 않은 파일 크기는 1.7GB입니다. 1'829'768 레코드가 있어야합니다! 694 아닙니다!
불행히도이 효과를 보려면 15MB 데이터 파일을 다운로드해야합니다.
Download UNIX file that causes decompressing problems here