2

我使用以下代码创建一个 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

请帮忙。

4

1 回答 1

6

查看 SharpZipLib 代码,ZipFile 类中有这个方法似乎可以满足您的要求:

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

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

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

于 2011-02-07T17:48:44.670 回答