簡體   English   中英

C#中的7-zip提取

[英]7-zip extraction in C#

我有一個文件夾,其中包含需要提取的一百萬個zip文件。 我嘗試過兩種方法:

方法1:使用7-zip exe文件和System.Diagnostic Process,如下所示

 ProcessStartInfo p = new ProcessStartInfo();
 p.FileName = "7za.exe" 
 p.Arguments = "e " + sourceName; // sourceName is the name of the zip file
 p.WindowStyle = ProcessWindowStyle.Hidden;
 Process x = Process.Start(p);
 x.WaitForExit();

方法2:使用7z.dll和SevenZipExtractor,如下所示

 SevenZipExtractor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
 SevenZipExtractor zipFile = new SevenZipExtractor("inv1_0.zip");
 zipFile.ExtractArchive(@"c:\projects\extractor\extractor\bin\debug\inv1_0.dat");

這里有兩件事:

a)方法1完全正常。 方法2不起作用。 給出錯誤“ SevenZip.SevenZipArchiveException:無效的存檔:打開/讀取錯誤!”。 有人可以建議為什么在方法1提供正確的提取文件時會發生這種情況嗎?

b)由於存在一百萬個zip文件,因此我擔心像過程中那樣使用方式1: 循環遍歷一百萬個zip文件並使用每個文件的過程要花費多少。 我真的很想使用Way 2,但是由於某種原因它給出了例外。

您無法避免解壓縮1,000,000個文件的成本,但是您可以選擇要花費的方式-處理器使用率或時間。 如果您不想鎖定主線程,請讓輔助線程為您處理文件處理。

選項:

但這似乎根本不是您的問題。 在我看來,SevenZipExtractor的行為方式不同於獨立的.exe。 顯然,我會堅持使用第一個(有效的)選項,直到我發現第二種方法出了什么問題。

您可能還想訪問sevenzipsharp的CodePlex討論組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM