0

我有一个文件夹,其中包含我需要提取的一百万个 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 文件并为每个文件使用进程是多么昂贵。我真的很想使用方式 2,但由于某种原因它给出了例外。

4

1 回答 1

0

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

选项:

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

您可能还想访问Sevenzipsharp 的 CodePlex 讨论组

于 2013-11-21T20:44:40.077 回答