0

我在我的应用程序中使用付费版本的 Xceed.Zip.QuickZip.Zip 实用程序来压缩包含文件和目录的文件夹。这是我正在使用的 Xceed Zip 命令

Xceed.Zip.Licenser.LicenseKey = XceedZipKey;
Xceed.Zip.QuickZip.Zip(ZipFilePath, true, true, true, filesToZip);

ZipFilePath 是最终 zip 的名称,包括将创建 zip 的路径。所以它就像D:\MyData/MyZip.zip

而且,filesToZip 是这样的D:\MyDataToZip\Versions\\*.*

因此,当创建 zip 时,我会看到一个 MyDataToZip 文件夹,其中包含 Versions 文件夹,然后是 Version 文件夹内的所有内容。

但我希望 zip 不包含 MyDataToZip & Versions 文件夹。它应该从版本文件夹开始。我怎样才能做到这一点?

请注意,我的应用程序是基于 .Net 4.0 构建的,所以我不能使用 System.IO.Compression。

4

2 回答 2

1

使用 Xceed FileSystem API 以保留从目标文件夹向下的文件路径。

public void ZipFolder(string zipFilePath, string folderPath, bool recursive, bool replaceExistingFiles, params object[] filters)
{
    AbstractFile zipFile = new DiskFile(zipFilePath);
    ZipArchive zip = new ZipArchive(zipFile);

    using (AutoBatchUpdate batch = new AutoBatchUpdate(zip))
    {
        AbstractFolder sourceFolder = new DiskFolder(folderPath);
        sourceFolder.CopyFilesTo(zip, recursive, replaceExistingFiles, filters);
    }
}
于 2018-09-14T00:26:52.347 回答
0

你需要使用

Xceed.Zip.QuickZip.Zip(ZipFilePath, true, true, false, filesToZip);

因为第四个参数是:

preservePaths 指示目录结构是否应保留在 zip 文件中的布尔值。

REF: Zip(String,Boolean,Boolean,Boolean,String[]) 方法

于 2014-09-30T11:32:48.200 回答