2013-08-03 87 views
5

我對我的項目中引用的DLL文件:在Form1的頂部我加SevenZipSharp.dll我試圖用壓縮一些SevenZipSharp文件,但得到一個錯誤

然後:

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

但我發現了一個錯誤:

Cannot load 7-zip library or internal COM error! Message: DLL file does not exist

但我已經引用的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

你是否設置了dll來複制本地? –

+0

lc我添加的dll作爲參考SevenZipSharp.dll屬性複製本地已設置爲true。但如果即時通過某人在這裏尋找解決方案:http://blog.jongallant.com/2011/10/7-zip-dll-file-does-not-exist.html#.UfyCWZIzO0I我看到該文件的DLL文件應該是7z.dll我不知道該怎麼辦。 – DanielVest

回答

3

你可能缺少了必要的內部COM組件。如果你檢查InnerException,它應該給你一個很好的想法。將這些複製到您的工作目錄,並且應該設置。

+1

現在添加了這行代碼並開始工作:SevenZipExtractor.SetLibraryPath(@「C:\ Program Files \ 7-Zip \ 7z.dll」);問題是,如果我現在把他的程序給別人,他的電腦上就不會有7z.dll。所以他會打一個例外。 – DanielVest

+0

@DanielVest這就是爲什麼你應該將7z.dll複製到你的工作目錄。 –

+0

Vaughan好的,我將7z.dll複製到\​​ Debug目錄。但我不能添加這個DLL作爲參考它不會讓我。那麼我現在該如何讓dll在我的程序中不寫特定路徑呢? – DanielVest

0

這是最好的壓縮方法&有史以來最強韌的解決方案。

  • 給寫入訪問輸出文件夾或驅動器。
  • 安裝7壓縮軟件到您的電腦

功能:

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

} 
2

截至OP的帖子的末尾提到的,你需要設置庫路徑。但要克服環境的獨特性,您總是可以使用反射來設置DLL的路徑。只要7z.dll在項目的bin文件夾中,這將爲您提供路徑。

添加到您的using語句:

using System.Reflection; 

那麼這樣的路徑設置:

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

非常好,像魅力一樣工作! – MaYaN

1

複製7z.dll (32位版本)到工作目錄。這個異常有時會在64位版本中拋出。

+1

這是我得到的最佳答案。您必須安裝32位版本的應用程序(7-Zip)。 –

相關問題