我有一个包含一百万个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,但出于某种原因,它给出了例外。
答案 0 :(得分:0)
您无法避免解压缩1,000,000个文件的成本,但您可以选择它的成本 - 处理器使用或时间。如果您不想锁定主线程,请让辅助线程为您处理文件处理。
选项:
但这似乎根本不是你的问题。在我看来,SevenZipExtractor的行为方式与独立的.exe不同。我显然会坚持第一个(工作)选项,直到我弄清楚第二种方法有什么问题。