【问题标题】:How to compress only files without folders using the SharpZipLib library? (C#)如何使用 SharpZipLib 库仅压缩没有文件夹的文件? (C#)
【发布时间】:2011-02-07 17:29:19
【问题描述】:

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

请帮忙。

【问题讨论】:

    标签: c# sharpziplib


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!我会这样使用:zip.Add(file, Path.GetFileName(file));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多