繁体   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