如何使用SharpZipLib库仅压缩没有文件夹的文件? (C#)

时间:2011-02-07 17:29:20

标签: c# sharpziplib

我使用以下代码创建一个zip文件:

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

请帮助。

1 个答案:

答案 0 :(得分:6)

查看SharpZipLib代码,ZipFile类中有这个方法似乎可以做你想要的:

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

您只需从文件中获取IStaticDataSource,并创建相应的entryName(不包括目录路径),即在file字符串中搜索最后一个目录分隔符Path.DirectorySeparatorChar Field,之后的任何事情应该只是你的文件名。

[编辑]澄清:我最初建议Add(string file, string entryName),但当我看到OP在调用中指定了compressionMethod时,编辑了上述方法。但是新zip压缩条目的默认compressionMethod是CompressionMethod.Deflated,因此使用Add(string file, string entryName)方法应该得到相同的结果,而不必获得IStaticDataSource。