문제

인터넷 어딘가에서 다음 코드를 가져 왔으며 다음과 같은 코드를 사용하여 GZIP 파일을 압축하는 데 사용합니다. http://wwwmas, 그러나 그것을 실행할 때, 나는 마법 번호가 일치하지 않는다는 점에서 예외를 얻습니다.

public byte[] Download(string pUrl) {
    WebClient wc = new WebClient();
    byte[] bytes = wc.DownloadData(pUrl);
    return UnGzip(bytes, 0);
}

private static byte[] UnGzip(byte[] data, int start) {
    int size = BitConverter.ToInt32(data, data.Length - 4);
    byte[] uncompressedData = new byte[size];
    MemoryStream memStream = new MemoryStream(data, start, (data.Length - start));
    memStream.Position = 0;
    GZipStream gzStream = new GZipStream(memStream, CompressionMode.Decompress);

    try {
        gzStream.Read(uncompressedData, 0, size);
    } catch (Exception gzError) {
        throw;
    }

    gzStream.Close();
    return uncompressedData;
}

이 문제를 일으킬 코드에 어떤 문제가 있습니까?

도움이 되었습니까?

해결책

문제는 질문에 지정된 URL이 실제로 GZIP 파일을 제공하지 않는다는 것입니다. 브라우저를 거울을 선택하는 페이지로 이동합니다.

당신이 일시적으로 당신을 바꾸면 Download 사용 방법 :

string text = wc.DownloadString(pUrl);
Console.WriteLine(text);

거울 선택을 위해 모든 HTML이 표시됩니다.

URL을 사용하는 경우 실제 GZ 파일, 예를 들어 http://wwwmas 그런 다음 잘 작동합니다.

다른 팁

gzipstream이 링크 된 파일을 읽을 수 없었지만 다른 GZIP 파일을 압축하는 것 같습니다. 예를 들어:

ftp://gnu.mirror.iweb.com/gnu/bash/bash-1.14.0-1.14.1.diff.gz

ftp://gnu.mirror.iweb.com/gnu/emacs/elisp-manual-21-2.8.tar.gz

링크 한 파일이 손상 되었습니까? 또는 비표준 또는 새 GZIP 형식을 사용 할 수도 있습니다.

나는 사용했다 dotnetzip .zip 파일로 약간의 성공을 거두었습니다. 문서에 따르면 GZIP에서도 작동합니다. 이 사람의 도서관에게 시도해 볼 수 있습니다.

.NET은 지원하지 않습니다 타르 체재. gzip 단순히 바이트 컴프레서입니다. 타르는 컨테이너 형식입니다.

같은 형식 지퍼 그리고 rar,이 두 단계를 결합하지만 스트리밍 압축에는 좋지 않습니다.

내가 정확하게 기억한다면 Sharpziplib 타르를 지원합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top