当尝试提取单个文件时,SevenZipSharp.Interop NuGet为什么会提取多个文件?

问题描述 投票:1回答:1

也许只是我,我做错了什么,或者这是班上的[[预期结果,但我跌倒了,好像出了点问题...

我已经建立了以下测试档案(文件夹中也有文件,但不应与这个问题有关):enter image description here

我使用以下方法提取单个文件(New Text Document.txt)...

#region SevenZipExtractor events private void SevenZipExtractor_Extracting(object sender, ProgressEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZipExtractor_Extracting -- " + e.PercentDone + "%"); m_progress.UpdateProcessingStatus(e.PercentDone); } private void SevenZipExtractor_FileExtractionFinished(object sender, FileInfoEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZipExtractor_FileExtractionFinished -- " + e.PercentDone + "% Filename:" + e.FileInfo.FileName); } private void SevenZipExtractor_FileExtractionStarted(object sender, FileInfoEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZipExtractor_FileExtractionStarted -- " + e.PercentDone + "% Filename:" + e.FileInfo.FileName); } #endregion private void DecompressThread() { using (SevenZipExtractor extractor = new SevenZipExtractor(inStream)) { extractor.Extracting += SevenZipExtractor_Extracting; extractor.FileExtractionStarted += SevenZipExtractor_FileExtractionStarted; extractor.FileExtractionFinished += SevenZipExtractor_FileExtractionFinished; using (FileStream file = new FileStream("C:\Sandbox\Z-Test\New Text Document.txt", FileMode.Create, FileAccess.Write)) { extractor.ExtractFile(4, file); } extractor.Extracting -= SevenZipExtractor_Extracting; extractor.FileExtractionStarted -= SevenZipExtractor_FileExtractionStarted; extractor.FileExtractionFinished -= SevenZipExtractor_FileExtractionFinished; } }

然后出现事件ExtractingFileExtractionStartedFileExtractionFinished,我将

EXPECT

取回以下结果...SevenZipExtractor_FileExtractionStarted -- 100% Filename:New Text Document.txt SevenZipExtractor_Extracting -- 100% SevenZipExtractor_FileExtractionFinished -- 100% Filename:New Text Document.txt
但是,我得到了以下结果...

SevenZipExtractor_Extracting -- 100% SevenZipExtractor_Extracting -- 100% SevenZipExtractor_FileExtractionStarted -- 20% Filename:Test Folder 1 SevenZipExtractor_FileExtractionFinished -- 20% Filename:Test Folder 1 SevenZipExtractor_FileExtractionStarted -- 40% Filename:Test Folder 2 SevenZipExtractor_FileExtractionFinished -- 40% Filename:Test Folder 2 SevenZipExtractor_FileExtractionStarted -- 60% Filename:Microsoft - Visual Studio 6 MSDN Library.iso SevenZipExtractor_Extracting -- 1% SevenZipExtractor_Extracting -- 2% SevenZipExtractor_Extracting -- 3% SevenZipExtractor_Extracting -- 4% SevenZipExtractor_Extracting -- 5% SevenZipExtractor_Extracting -- 6% SevenZipExtractor_Extracting -- 7% SevenZipExtractor_Extracting -- 8% SevenZipExtractor_Extracting -- 9% SevenZipExtractor_Extracting -- 10% SevenZipExtractor_Extracting -- 11% SevenZipExtractor_Extracting -- 12% SevenZipExtractor_Extracting -- 13% SevenZipExtractor_Extracting -- 14% SevenZipExtractor_Extracting -- 15% SevenZipExtractor_Extracting -- 16% SevenZipExtractor_Extracting -- 17% SevenZipExtractor_Extracting -- 18% SevenZipExtractor_Extracting -- 19% SevenZipExtractor_Extracting -- 20% SevenZipExtractor_Extracting -- 21% SevenZipExtractor_Extracting -- 22% SevenZipExtractor_Extracting -- 23% SevenZipExtractor_Extracting -- 24% SevenZipExtractor_Extracting -- 25% SevenZipExtractor_Extracting -- 26% SevenZipExtractor_Extracting -- 27% SevenZipExtractor_Extracting -- 28% SevenZipExtractor_Extracting -- 29% SevenZipExtractor_Extracting -- 30% SevenZipExtractor_Extracting -- 31% SevenZipExtractor_Extracting -- 32% SevenZipExtractor_Extracting -- 33% SevenZipExtractor_Extracting -- 34% SevenZipExtractor_Extracting -- 35% SevenZipExtractor_Extracting -- 36% SevenZipExtractor_Extracting -- 37% SevenZipExtractor_Extracting -- 38% SevenZipExtractor_Extracting -- 39% SevenZipExtractor_Extracting -- 40% SevenZipExtractor_Extracting -- 41% SevenZipExtractor_Extracting -- 42% SevenZipExtractor_Extracting -- 43% SevenZipExtractor_Extracting -- 44% SevenZipExtractor_Extracting -- 45% SevenZipExtractor_Extracting -- 46% SevenZipExtractor_Extracting -- 47% SevenZipExtractor_Extracting -- 48% SevenZipExtractor_Extracting -- 49% SevenZipExtractor_Extracting -- 50% SevenZipExtractor_Extracting -- 51% SevenZipExtractor_Extracting -- 52% SevenZipExtractor_Extracting -- 53% SevenZipExtractor_Extracting -- 54% SevenZipExtractor_Extracting -- 55% SevenZipExtractor_Extracting -- 56% SevenZipExtractor_Extracting -- 57% SevenZipExtractor_Extracting -- 58% SevenZipExtractor_Extracting -- 59% SevenZipExtractor_Extracting -- 60% SevenZipExtractor_Extracting -- 61% SevenZipExtractor_Extracting -- 62% SevenZipExtractor_Extracting -- 63% SevenZipExtractor_Extracting -- 64% SevenZipExtractor_Extracting -- 65% SevenZipExtractor_Extracting -- 66% SevenZipExtractor_Extracting -- 67% SevenZipExtractor_Extracting -- 68% SevenZipExtractor_Extracting -- 69% SevenZipExtractor_Extracting -- 70% SevenZipExtractor_Extracting -- 71% SevenZipExtractor_Extracting -- 72% SevenZipExtractor_Extracting -- 73% SevenZipExtractor_Extracting -- 74% SevenZipExtractor_Extracting -- 75% SevenZipExtractor_Extracting -- 76% SevenZipExtractor_Extracting -- 77% SevenZipExtractor_Extracting -- 78% SevenZipExtractor_Extracting -- 79% SevenZipExtractor_Extracting -- 80% SevenZipExtractor_Extracting -- 81% SevenZipExtractor_Extracting -- 82% SevenZipExtractor_Extracting -- 83% SevenZipExtractor_Extracting -- 84% SevenZipExtractor_Extracting -- 85% SevenZipExtractor_Extracting -- 86% SevenZipExtractor_Extracting -- 87% SevenZipExtractor_Extracting -- 88% SevenZipExtractor_Extracting -- 89% SevenZipExtractor_Extracting -- 90% SevenZipExtractor_Extracting -- 91% SevenZipExtractor_Extracting -- 92% SevenZipExtractor_Extracting -- 93% SevenZipExtractor_Extracting -- 94% SevenZipExtractor_Extracting -- 95% SevenZipExtractor_Extracting -- 96% SevenZipExtractor_Extracting -- 97% SevenZipExtractor_Extracting -- 98% SevenZipExtractor_Extracting -- 99% SevenZipExtractor_FileExtractionFinished -- 60% Filename:Microsoft - Visual Studio 6 MSDN Library.iso SevenZipExtractor_FileExtractionStarted -- 80% Filename:New Microsoft Excel Worksheet.xlsx SevenZipExtractor_FileExtractionFinished -- 80% Filename:New Microsoft Excel Worksheet.xlsx SevenZipExtractor_FileExtractionStarted -- 100% Filename:New Text Document.txt SevenZipExtractor_Extracting -- 100% SevenZipExtractor_FileExtractionFinished -- 100% Filename:New Text Document.txt

似乎,即使我试图提取一个文件,它仍在处理所有文件。当我尝试更大规模地使用它时(提取一个完整的文件而不是仅提取一个文件),我将拥有一个归档文件,该归档文件的根目录中有一个大文件,还有一堆小文件文件夹,尝试时会看到巨大的影响处理每个小文件(提取每个小文件所需的时间与在存档根目录中提取大文件的时间一样长。

用户是否期望在内存流中设置寻点或其他某种类型?我如何才能花很短的时间提取一个小的文本文件?

c# 7zip sevenzipsharp
1个回答
0
投票
我已经提交了issue to the GitHub repo。在这一点上,我认为这是过去未解决的错误,或者一次逐步提取单个文件不是提取整个存档的预期方法。在我的问题示例中,我的目标是尝试从存档中提取单个文件,而无需类处理整个文件(即使最终仅提取单个文件)。

在宏伟方案中,我试图一次提取整个档案,一次处理一个文件(主要是因为我从引用事件中得到的消息没有得到可靠的结果,例如一次仅处理一个文件) 。这可能不是提取归档文件的预期方法(可能只是获得相同结果的另一条途径,但从未使用过,因此从未抱怨过)。

我最终尝试使用以下方法成功提取整个档案。从上述事件中获取非常可靠的消息。我还向示例添加了一个小模式(然后是我的问题),使其完全可以运行代码。我错误地忽略了问题中的inStream参考。

#region SevenZipExtractor events private void SevenZip_Processing(object sender, ProgressEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZip_Processing -- " + e.PercentDone + "%"); m_progress.UpdateProcessingStatus(e.PercentDone); } private void SevenZipExtractor_FileExtractionFinished(object sender, FileInfoEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZipExtractor_FileExtractionFinished -- " + e.PercentDone + "% Filename:" + e.FileInfo.FileName); } private void SevenZipExtractor_FileExtractionStarted(object sender, FileInfoEventArgs e) { System.Diagnostics.Debug.WriteLine("SevenZipExtractor_FileExtractionStarted -- " + e.PercentDone + "% Filename:" + e.FileInfo.FileName); } #endregion private void DecompressThread(string archiveFilePath) { byte[] fileInBytes = File.ReadAllBytes(archiveFilePath); using (MemoryStream inStream = new MemoryStream(fileInBytes)) { using (SevenZipExtractor extractor = new SevenZipExtractor(inStream)) { extractor.Extracting += SevenZip_Processing; extractor.FileExtractionStarted += SevenZipExtractor_FileExtractionStarted; extractor.FileExtractionFinished += SevenZipExtractor_FileExtractionFinished; extractor.ExtractArchive("C:\Sandbox\Z-Test"); extractor.Extracting -= SevenZip_Processing; extractor.FileExtractionStarted -= SevenZipExtractor_FileExtractionStarted; extractor.FileExtractionFinished -= SevenZipExtractor_FileExtractionFinished; } } }

结果是...

SevenZipExtractor_FileExtractionStarted -- 11% Filename:Test Folder 1 SevenZipExtractor_FileExtractionFinished -- 11% Filename:Test Folder 1 SevenZipExtractor_FileExtractionStarted -- 22% Filename:Test Folder 2 SevenZipExtractor_FileExtractionFinished -- 22% Filename:Test Folder 2 SevenZipExtractor_FileExtractionStarted -- 33% Filename:Microsoft - Visual Studio 6 MSDN Library.iso SevenZip_Processing -- 20% SevenZip_Processing -- 40% SevenZip_Processing -- 60% SevenZip_Processing -- 80% SevenZipExtractor_FileExtractionFinished -- 33% Filename:Microsoft - Visual Studio 6 MSDN Library.iso SevenZipExtractor_FileExtractionStarted -- 44% Filename:New Microsoft Excel Worksheet.xlsx SevenZipExtractor_FileExtractionFinished -- 44% Filename:New Microsoft Excel Worksheet.xlsx SevenZipExtractor_FileExtractionStarted -- 56% Filename:New Text Document.txt SevenZipExtractor_FileExtractionFinished -- 56% Filename:New Text Document.txt SevenZipExtractor_FileExtractionStarted -- 67% Filename:Test Folder 1\New Text Document In TF1 - Copy.txt SevenZipExtractor_FileExtractionFinished -- 67% Filename:Test Folder 1\New Text Document In TF1 - Copy.txt SevenZipExtractor_FileExtractionStarted -- 78% Filename:Test Folder 1\New Text Document In TF1.txt SevenZipExtractor_FileExtractionFinished -- 78% Filename:Test Folder 1\New Text Document In TF1.txt SevenZipExtractor_FileExtractionStarted -- 89% Filename:Test Folder 2\New Text Document In TF2 - Copy.txt SevenZipExtractor_FileExtractionFinished -- 89% Filename:Test Folder 2\New Text Document In TF2 - Copy.txt SevenZipExtractor_FileExtractionStarted -- 100% Filename:Test Folder 2\New Text Document In TF2.txt SevenZip_Processing -- 100% SevenZipExtractor_FileExtractionFinished -- 100% Filename:Test Folder 2\New Text Document In TF2.txt

© www.soinside.com 2019 - 2024. All rights reserved.