2010-02-24 4 views
26

내가 ZIP 파일을 얻을 디렉토리 로 추출하는 기능을 가지고 (나는 DotNetZip 라이브러리를 사용합니다.)DotNetZip 라이브러리를 사용하여 프로그래밍 방식으로 ZIP 파일을 추출 하시겠습니까?

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) 
{ 
    ZipFile zip = ZipFile.Read(zipFileName); 
    Directory.CreateDirectory(outputDirectory); 
    zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently); 
} 

내 ZIP 파일은 여러 개의 파일과 디렉토리가 포함되어 있습니다. 그러나 나는이 파일들 중 일부만을 추출하기를 원합니다. 전부는 아니며 입니다.

어떻게하면됩니까?

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) 
{ 
    ZipFile zip = ZipFile.Read(zipFileName); 
    Directory.CreateDirectory(outputDirectory); 
     foreach (ZipEntry e in zip) 
     { 
     // check if you want to extract e or not 
     if(e.FileName == "TheFileToExtract") 
      e.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently); 
     } 
} 

을 : 당신이 그것을 추출 할 경우

답변

30

당신은보고 각 ZipEntry을 테스트해야합니다.

ZipFile zip = ZipFile.Read(zipFileName); //Runs in framework 4.5 
19

는 ZipFile를 클래스의 ExtractSelectedEntries 방법이있다. 여기 서명 메소드가 있습니다.

public void ExtractSelectedEntries(string selectionCriteria, string directoryPathInArchive, string extractDirectory, ExtractExistingFileAction extractExistingFile) 

프로그램에서 selectionCriteria를 제공하여 지정된 파일을 간단히 추출 할 수 있습니다.

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) 
{ 
    ZipFile zip = ZipFile.Read(zipFileName); 
    Directory.CreateDirectory(outputDirectory); 
    zip.ExtractSelectedEntries("name = *.doc", "document\", outputDirectory, ExtractExistingFileAction.OverwriteSilently); 
} 

조건을 결합 AND 또는 OR과 결합 할 수 있습니다. selectionCriteria에 대해 "name = * .txt AND size> = 100k"와 같은 문자열을 사용하면 이름이 .txt로 끝나고 압축되지 않은 크기가 100 킬로바이트 이상인 항목을 검색합니다. 여기


기준 (파일 검색)

이름을 몇 가지 기준 샘플입니다!

이름 = * .XLS (.XLS하지 않은 확장자를 가진 모든 파일) = * .mp3 (.mp3 확장명을 가진 파일)

* .mp3 (위와 동일하게 .mp3 확장자를 가진 파일)

속성 = A (해당 특성이 아카이브 비트를 포함하는 모든 파일)

속성! = H (그 속성 숨겨진 비트를 포함하지 않는 모든 파일)

에 mtime> 2009-01-01 (모든 마지막 수정 1 월 1 일 이후에 시간, 2009)

크기> 2기가바이트를 가진 파일 (모든 누구의 압축 해제 된 크기 2기가바이트보다 큰 파일) 더 참고로


, 당신은 쇼 uld는 라이브러리와 함께 API 문서 만 읽습니다.

+1

여러 기준으로 ExtractSelectedEntries를 사용하는 방법. 모든 이미지 형식 (jpg, png, gif, jpeg)에 필요합니다. 그것을하는 방법? –

12

LINQ를 사용하여 추출 할 항목을 선택할 수도 있습니다. 예를 들면 : 당신이 where 절에 원하는 쿼리 기준을 사용할 수 있습니다 물론

using (var zip = ZipFile.Read(ArchiveToRead)) 
{ 
    var selection = from e in zip.Entries 
     where System.IO.Path.GetFileName(e.FileName).StartsWith("C") 
     select e; 

    foreach (var e in selection) 
     e.Extract(extractDir); 
} 

.