C#中的7-zip提取

时间:2013-11-21 20:19:58

标签: c# 7zip sevenzipsharp

我有一个包含一百万个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:无效存档:打开/读取错误!”。当有人提供正确的提取文件时,有人可以建议为什么会发生这种情况吗?

b)由于有一百万个zip文件,我担心使用Way 1:就像在Process中一样。循环使用一百万个zip文件并为每个文件使用进程是多么昂贵。我真的很想使用Way 2,但出于某种原因,它给出了例外。

1 个答案:

答案 0 :(得分:0)

您无法避免解压缩1,000,000个文件的成本,但您可以选择它的成本 - 处理器使用或时间。如果您不想锁定主线程,请让辅助线程为您处理文件处理。

选项:

但这似乎根本不是你的问题。在我看来,SevenZipExtractor的行为方式与独立的.exe不同。我显然会坚持第一个(工作)选项,直到我弄清楚第二种方法有什么问题。

您可能还想访问sevenzipsharp's CodePlex discussion group