2011-02-07 15 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 

ヘルプお願いします。

答えて

6

SharpZipLibコードを見ると、あなたがやりたいように思われるZIPファイルのクラスでは、この方法があります:

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

あなただけのファイルからIStaticDataSourceを取得する必要があり、かつ適切なを作成しますentryName(ディレクトリパスは含まれません)。すなわち、最後のディレクトリセパレータPath.DirectorySeparatorChar Fieldfileの文字列で検索した後、それ以降のファイル名はファイル名にしてください。

[編集]明確化:私はもともとAdd(string file, string entryName)を提案していましたが、OPがコールでcompressionMethodを指定しているのを見て、上記の方法で編集しました。しかし、新しいzipエントリのデフォルトのcompressionMethodはCompressionMethod.Deflatedなので、Add(string file, string entryName)メソッドを使用すると、IStaticDataSourceを取得しなくても同じ結果が得られます。

+0

ありがとうございました!私はそう使います:zip.Add(file、Path.GetFileName(file)); –

関連する問題