我在项目中引用了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);
}
答案 0 :(得分:3)
您可能缺少所需的内部COM组件。如果你检查InnerException,它应该让你知道缺少什么。将这些复制到您的工作目录,您应该设置。
答案 1 :(得分:2)
如OP的帖子末尾所述,您需要设置库路径。但是为了克服环境的独特性,您始终可以使用反射来设置DLL的路径。只要7z.dll位于项目的bin文件夹中,就可以获得它的路径。
将此添加到您的using语句中:
using System.Reflection;
然后设置如下路径:
SevenZipCompressor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll"));
答案 2 :(得分:1)
将7z.dll (32位版本)复制到工作目录。此异常有时会在64位版本中抛出。
答案 3 :(得分:0)
这很好用&最大压缩方法。韧性解决方案。
功能:
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);
}