5

我引用了我的项目的 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);
}
4

4 回答 4

3

您可能缺少所需的内部 COM 组件。如果您检查 InnerException,它应该可以让您很好地了解缺少的内容。将这些复制到您的工作目录,您应该进行设置。

于 2013-08-03T04:09:50.137 回答
2

如 OP 帖子末尾所述,您需要设置库路径。但是为了克服环境的独特性,您总是可以使用反射来设置 DLL 的路径。只要 7z.dll 在项目的 bin 文件夹中,这将为您提供它的路径。

将此添加到您的 using 语句中:

using System.Reflection;

然后像这样设置路径:

SevenZipCompressor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll"));
于 2016-08-11T10:49:16.033 回答
1

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

于 2016-10-23T17:59:01.590 回答
0

This is working well & max compress method ever.the bast solution.

  • give writing access to the output folder or drive.
  • install 7 zip software into your pc

Function:

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

}
于 2015-11-13T13:14:44.247 回答