繁体   English   中英

我正在尝试使用SevenZipSharp压缩一些文件,但收到错误

[英]I'm trying to compress some files using SevenZipSharp but getting an error

我在项目中引用了dll文件: SevenZipSharp.dll

然后在Form1的顶部我添加:

using SevenZip;

然后我创建了一个我通过按钮单击事件调用的函数:

private void Compress()
{
            string source = @"C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_02-08-13";
            string output = @"D:\Zipped.zip";

            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.CompressionMode = CompressionMode.Create;
            compressor.TempFolderPath = System.IO.Path.GetTempPath();
            compressor.CompressDirectory(source, output);
}

我使用了一个断点,错误就行了:

compressor.CompressDirectory(source, output);

但我收到一个错误:

无法加载7-zip库或内部COM错误! 消息:DLL文件不存在

但是我已经引用了dll,为什么会出现这个错误呢? 我该如何解决?

解决了这个问题

private void Compress()
{
            string source = @"C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_02-08-13";
            string output = @"D:\Zipped.zip";
            SevenZipExtractor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.CompressionMode = CompressionMode.Create;
            compressor.TempFolderPath = System.IO.Path.GetTempPath();
            compressor.CompressDirectory(source, output);
}

您可能缺少所需的内部COM组件。 如果你检查InnerException,它应该让你知道缺少什么。 将这些复制到您的工作目录,您应该设置。

如OP的帖子末尾所述,您需要设置库路径。 但是为了克服环境的独特性,您始终可以使用反射来设置DLL的路径。 只要7z.dll位于项目的bin文件夹中,就可以获得它的路径。

将此添加到您的using语句:

using System.Reflection;

然后像这样设置路径:

SevenZipCompressor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll"));

将7z.dll (32位版本)复制到工作目录。 此异常有时会在64位版本中引发。

这是最好的工作和最大压缩方法。韧性解决方案。

  • 授予对输出文件夹或驱动器的写入权限。
  • 在您的电脑上安装7个zip软件

功能:

private void Compress() 
{

    string source = "E:\\w";
    string output = "E:\\3.7z";

    string programFiles1 = "C:\\Program Files\\7-Zip\\7z.dll";

    if (File.Exists(programFiles1))
    {
        SevenZipExtractor.SetLibraryPath(programFiles1);
    }

    SevenZipCompressor compressor = new SevenZipCompressor();
    compressor.ArchiveFormat = OutArchiveFormat.SevenZip;
    compressor.CompressionMode = SevenZip.CompressionMode.Create;
    compressor.TempFolderPath = System.IO.Path.GetTempPath();
    compressor.CompressDirectory(source, output);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM