首页 > 解决方案 > SquidBox SevenZipSharp 在创建 zip 时创建未命名文件夹

问题描述

我尝试压缩我放置在我的临时文件目录 (%temp%) 中的三个文件。使用 SevenZipSharp 压缩它们时,我会得到一个 zip 文件,其中包含一个未命名的文件夹。在这个文件夹中,我有我的三个文件,但我需要这些文件位于 Zip 的根目录中。我在这里错过了什么,我做错了什么?

public void ZipFiles(String[] files, String absoluteDestination)
{
    List<String> createdFiles = HandleFileIgnore(files);

    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
    SevenZipCompressor compressor = new SevenZipCompressor(m_TempPath);
    compressor.ArchiveFormat = m_outArchiveFormat; //OutArchiveFormat.Zip
    compressor.PreserveDirectoryRoot = true; //False doesn't solve the problem
    compressor.Compressing += CompressingProgressChanged;
    int commonrootlenght = FindCommonRoot(files, m_CommonRootFolder); //if no commonRootFolder is set it will return -1
    CompressFilesFromRoot(files, absoluteDestination, compressor, commonrootlenght);
    RemoveCreatedFiles(createdFiles);
}

private static void CompressFilesFromRoot(String[] files, String absoluteDestination, SevenZipCompressor compressor, int commonrootlenght)
{
    if (commonrootlenght < 0)
    {
        compressor.CompressFiles(absoluteDestination, files);
    }
    else
    {
        compressor.CompressFiles(absoluteDestination, commonrootlenght, files);
    }
}

在此处输入图像描述

标签: c#7zipsevenzipsharp

解决方案


SevenZipSharp 似乎无法处理 8.3 文件路径。我的文件夹名称是

C:\Users\XKC-ML~1\AppData\Local\Temp\ApplicationFolder

我只是用

archivePath = Path.GetFullPath(archivePath);

这就是诀窍。

编辑:错误已解决-> https://github.com/squid-box/SevenZipSharp/issues/102


推荐阅读