2009-11-18 4 views
4

하나 이상의 일반 TGZ 파일과 함께 하나의 일반 텍스트 파일을 포함하는 TGZ 파일을 수신하고 있습니다. 주 TGZ 파일의 압축을 풀고 그 안에 들어있는 일반 텍스트 파일을 읽는 방법을 알아 냈습니다. 그러나 중첩 된 TGZ 파일을 인식하고 압축을 푸는 방법을 파악할 수 없었습니다. 누구든지 전에이 문제를 보았습니까?C#에서 중첩 된 GZip (TGZ) 파일의 압축을 해제하는 방법

또한 수신중인 파일을 제어 할 수 없으므로 중첩 된 TGZ 파일이 포함 된 TGZ 파일의 형식을 변경할 수 없습니다. 하나의 다른주의 사항 (비록 그것이 중요하다고 생각하지는 않지만)은 유닉스 나 리눅스 환경에서이 파일들이 압축되고 tar되어지고 있다는 것입니다.

미리 도움을 청하십시오.

답변

5

무료 라이브러리 인 SharpZipLib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx)를 사용해보세요.

TGZ로 작업 할 수 있으며 파일을 부 풀리기 전에 파일을 테스트 할 수있는 방법이 있습니다. 따라서 올바른 파일 확장자에 의존하거나 개별적으로 테스트하여 압축 파일로 읽을 수 있는지 확인한 다음 주 파일 압축 해제 후 파일 확장자를 부 풀 수 있습니다.

+1

이 답변과 Keith의 답변은 모두 GZip porti 그러나 SharpZipLib는 Tot 파일을 처리 할 수있는 DotNetZip 라이브러리를 찾을 수없는 동안 압축되는 TAR 파일도 처리 할 수 ​​있습니다. – Flahrty

+1

DotNetZip은 Tar 아카이브를 처리하지 않습니다. !! !! – Cheeso

+2

이것은 GNU 라이센스를 기꺼이 받아들이는 사람에게 좋습니다! 나머지 우리에게는 또 다른 옵션이 있습니까? –

1

CodePlex에서 DotNetZip을 살펴보십시오. 당신이 원하는 모든 에 더 나은 DeflateStream 또는 GZipStream 클래스가 너무, 여기, 내장에있는 .NET BCL 하나를 교체하는 경우

". DotNetZip의 DeflateStream 및 GZipStream는 사용할 수 있습니다 Zlib의의 .NET 포트를 기반으로 독립 어셈블리. 이러한 스트림 압축 수준을 지원하고 세트 (RFC 1950, 1951을 완료 에 내장 클래스. 또한 ZlibStream이 훨씬 더 나은 성능을 제공 , 1952). "

압축 파일을 반복하고 보관 파일에서 개별 파일을 가져올 수있는 것처럼 보입니다. 그런 다음 압축 해제 된 파일을 테스트하여 그 중 하나가 GZip 파일인지 확인할 수 있습니다. 여기

Examples Page

using (ZipFile zip = ZipFile.Read(ExistingZipFile)) 
{ 
    foreach (ZipEntry e in zip) 
    { 
    e.Extract(OutputStream); 
    } 
} 

키스

+1

이 글을 쓰는 시점에서 (2015 년 8 월) DotNetZip은 주요 버그가 수정되지 않은 버려진 프로젝트로 보입니다. 그것의보기에서 나는 그것을 사용하는 것이 좋습니다 수 없습니다. – SolarBear

4

읽고 .NET에서를 .tar 및 .TGZ (또는 .tar.gz를) 파일을 작성하려면, 당신이 사용할 수있는이 액형에서 SNIPPIT입니다 파일 타르 클래스 :

http://cheesoexamples.codeplex.com/SourceControl/changeset/view/97756#1868643

매우 간단한 사용법.

var entries = Ionic.Tar.List("archive.tar"); // also handles .tgz files 

추출 타르 아카이브의 모든 항목 :

string[] filenames = { ... }; 
Ionic.Tar.CreateArchive("archive.tgz", filenames, TarOptions.Compress); 

는 tar 아카이브를 읽어

string[] filenames = { ... }; 
Ionic.Tar.CreateArchive("archive.tar", filenames); 

가 압축 (gzip으로 압축) tar 아카이브를 만듭니다 아카이브를 만들려면 :

var entries = Ionic.Tar.Extract("archive.tar"); // also handles .tgz files 
+0

Tar.cs 링크가 죽었으므로 다른 링크를 찾을 수 없습니다. 새 것을 제공 할 수 있습니까? –

+2

예, 다음은 활성 링크입니다. http://cheesoexamples.codeplex.com/SourceControl/changeset/view/97756#1868643 코드, readme 및 makefile이 포함 된 zip을 다운로드하려면 다음을 사용하십시오. http : //cheesoexamples.codeplex.com/releases/view/76708 – Cheeso

+0

tar 아카이브의 모든 내용을 추출 할 디렉토리도 지정해 주시면됩니다. –

관련 문제