避免使用Xceed.Zip.QuickZip-Zip实用程序创建不必要的目录

本文关键字:不必要 创建 实用程序 QuickZip-Zip Xceed Zip | 更新日期: 2023-09-27 18:25:07

我在应用程序中使用付费版本的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&版本文件夹。它应该从"版本"文件夹开始。我怎样才能做到这一点?

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

避免使用Xceed.Zip.QuickZip-Zip实用程序创建不必要的目录

使用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);
    }
}

您需要使用

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

因为第四个参数是:

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

REF:Zip(字符串,布尔,布尔,字符串[])方法