2013-11-21 35 views
0

我有一個文件夾,裏面包含我需要提取的一百萬個zip文件。兩種方法我都試過:C中的7-zip提取#

方法1:使用7-ZIP的exe文件和System.Diagnostic過程如下

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文件併爲每個zip文件使用過程的代價是多麼昂貴。我真的很想使用方式2,但出於某種原因,它給出了例外。

+1

選項3:編寫一個批處理文件。 http://stackoverflow.com/questions/138497/batch-scripting-iterating-over-files-in-a-directory –

+1

inv1_0.zip的完整路徑是什麼?你有沒有試過指定文件的完整路徑? – iamkrillin

+0

@iamkrillin全部在同一個文件夾中。無效的文件不是這裏的錯誤。 –

回答

0

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

選項:

但這似乎並不是你的問題。在我看來,SevenZipExtractor的行爲方式與獨立的.exe不同。我明顯堅持第一個(工作)選項,直到我找出第二種方法出了什麼問題。您可能還想訪問sevenzipsharp's CodePlex discussion group