首页 > 解决方案 > 如何使用 Squid-Box.SevenZipSharp 在 C# 上压缩和解压缩文件 执行失败错误

问题描述

我最近尝试使用 NuGet "Squid-Box.SevenZipSharp"压缩和解压缩文件 但是我无法压缩它们,错误可能来自 dll 库。我试过下载 32 位和 64 位的 7zip,同时使用 .dll 但错误是一样的,我想不出任何办法。

private void Compress(string source, string output)
        {
/*32-bits version*/  string path = Directory.GetCurrentDirectory() + @"\32-7z.dll";
//64-bits version    string path = Directory.GetCurrentDirectory() + @"\64-7z.dll";
            
            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.TempFolderPath = Path.GetTempPath();
            compressor.CompressionMode = SevenZip.CompressionMode.Create;
            compressor.CompressionLevel = SevenZip.CompressionLevel.Fast;
            compressor.CompressionMethod = CompressionMethod.Lzma2;
            compressor.ZipEncryptionMethod = ZipEncryptionMethod.Aes256;

            var assemblyDllPath = compressor.TempFolderPath + "32-7z.dll";
          //var assemblyDllPath = compressor.TempFolderPath + "64-7z.dll";
            File.Copy(path, assemblyDllPath, overwrite: true);
            SevenZipExtractor.SetLibraryPath(path);
            
            compressor.CompressDirectory(@"A:\C#\random", @"A:\C#\empty\archive.zip", "password");

        }

当我使用 32 位 dll 时,proyect 设置为 Debug x86。当我使用 64 位 dll 时,proyect 设置为 Debug x64。

两种情况下的错误如下:

SevenZip.SevenZipException
  HResult=0x80131500
  Message = Execution has failed due to an internal SevenZipSharp issue (0x80004001 / -2147467263).
Please report it to https://github.com/squid-box/SevenZipSharp/issues/, include the release number, 7z version used, and attach the archive.
  Source = SevenZipSharp

我真的很感谢你花时间在这件事上,在此先感谢。

标签: c#winformspasswordszip7zip

解决方案


您收到的错误代码 (0x80004001) 对应于错误“未实现” - 它来自您尝试使用 .zip 格式不支持的 CompressionMethod 的事实。

除非您有我建议使用的特定要求CompressionMode.Default - 否则以下适用于 .zip 格式:

CompressionMethod.Copy

CompressionMethod.Deflate

CompressionMethod.Deflate64

CompressionMethod.BZip2

CompressionMethod.Lzma

CompressionMethod.Ppmd

这就是我从 squid-box on github 得到的答案,只需更改CompressionMethod.Lzma2CompressionMethod.Lzma


推荐阅读