2011-02-07 1 views
2

나는 zip 파일을 만들려면 다음 코드를 사용 : 나는 아카이브의 다음과 같은 구조를 얻을SharpZipLib 라이브러리를 사용하여 폴더가없는 파일 만 압축하는 방법은 무엇입니까? (C#을)

var files = Directory.GetFiles(targetPath); 
var zip = ZipFile.Create(targetPath + "/myzip.zip"); 
zip.BeginUpdate(); 
foreach (var file in files) zip.Add(file, CompressionMethod.Deflated); 
zip.CommitUpdate(); 
zip.Close(); 

:

myzip.zip 
    - Folder1 
     - Folder2 
     - File1.txt 
     - File2.txt 
     - File3.txt 

을하지만 필요

myzip.zip 
    - File1.txt 
    - File2.txt 
    - File3.txt 

도움말 부디. SharpZipLib 코드를 보면

답변

6

, 당신이 원하는 것을 할 것 같다 것 ZipFile를 클래스에서이 방법이있다 :

public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)

당신은 파일에서 IStaticDataSource을 얻고, 적절한을 만들어야합니다

entryName (디렉토리 경로는 포함하지 않음). 즉, 마지막 디렉토리 구분자 Path.DirectorySeparatorChar Fieldfile 문자열로 검색하고 그 이후는 파일 이름이어야합니다.

[편집] 설명 : 원래 OP에서 호출시 compressionMethod를 지정하는 것을 보았을 때 원래 위의 방법으로 Add(string file, string entryName)을 제안했지만 편집했습니다. 그러나 새로운 압축 항목의 기본 compressionMethod는 CompressionMethod.Deflated이므로 Add(string file, string entryName) 메서드를 사용하면 IStaticDataSource를 가져 오지 않고 동일한 결과를 얻을 수 있습니다.

+0

감사합니다. 나는 이렇게 사용할 것이다 : zip.Add (file, Path.GetFileName (file)); –