SharpLibZip:添加没有路径的文件

Pro*_*ofK 14 compression sharpziplib

我正在使用以下代码,使用SharpZipLib库将文件添加到.zip文件中,但每个文件都以其完整路径存储.我只需要将文件存储在.zip文件的"root"中.

string[] files = Directory.GetFiles(folderPath);
using (ZipFile zipFile = ZipFile.Create(zipFilePath))
{
     zipFile.BeginUpdate();
     foreach (string file in files)
     {
          zipFile.Add(file);
     }
     zipFile.CommitUpdate();
}
Run Code Online (Sandbox Code Playgroud)

在提供的文档中,我找不到任何关于此选项的信息.由于这是一个非常受欢迎的图书馆,我希望有人读这篇文章可能会有所了解.

Pro*_*ofK 22

我的解决办法是设定NameTransform的对象属性ZipFileZipNameTransformTrimPrefix设置为文件的目录.这会导致删除条目名称的目录部分,即完整文件路径.

public static void ZipFolderContents(string folderPath, string zipFilePath)
{
    string[] files = Directory.GetFiles(folderPath);
    using (ZipFile zipFile = ZipFile.Create(zipFilePath))
    {
        zipFile.NameTransform = new ZipNameTransform(folderPath);
        foreach (string file in files)
        {
            zipFile.BeginUpdate();
            zipFile.Add(file);
            zipFile.CommitUpdate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

NameTransform属性的类型很酷INameTransform,允许自定义名称转换.


Tam*_*ege 11

如何使用System.IO.Path.GetFileName()结合ZipFile.Add()的entryName参数?

string[] files = Directory.GetFiles(folderPath);
using (ZipFile zipFile = ZipFile.Create(zipFilePath))
{
     zipFile.BeginUpdate();
     foreach (string file in files)
     {
          zipFile.Add(file, System.IO.Path.GetFileName(file));
     }
     zipFile.CommitUpdate();
}
Run Code Online (Sandbox Code Playgroud)

  • 你有最新版本的图书馆吗?它确实在file.add上有一个重载 (2认同)
  • 我非常肯定,至少在最新版本中. (2认同)