.NET에서 GZIP 아카이브를 압축시키는 문제
-
21-08-2019 - |
문제
인터넷 어딘가에서 다음 코드를 가져 왔으며 다음과 같은 코드를 사용하여 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 타르를 지원합니다.