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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了避免使用Xceed.Zip.QuickZip.Zip实用程序创建不必要的目录相关的知识,希望对你有一定的参考价值。

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

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

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

而且,filesToZip就像这样D: MyDataToZip Versions *。*

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

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

请注意我的应用程序是基于.Net 4.0构建的,因此我无法使用System.IO.Compression :(

在这方面的任何帮助将不胜感激。谢谢

答案

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

作为第4个参数是:

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

REF: Zip(String,Boolean,Boolean,Boolean,String[]) Method

以上是关于避免使用Xceed.Zip.QuickZip.Zip实用程序创建不必要的目录的主要内容,如果未能解决你的问题,请参考以下文章

Android中 使用AOP避免重复点击事件

Proguard:如何避免缩小(和混淆)整个包以避免删除(和混淆)“未使用的方法”?

[机缘参悟-76]:沟通技巧-职场中常见不合适语言的案例分析(尽量避免使用反问式语言)

sql 从select中插入,通过避免循环(避免循环)使用连接仅插入缺失的记录

使用异步避免重复代码

如何避免使用枚举?