簡體   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