Чтение ZIP без распаковки C#

У меня есть большой ZIP-файл, содержащий множество каталогов с десятками тысяч маленьких файлов, каждый из которых нужно прочитать.

Процесс извлечения их из ZIP с помощью 7-Zip занимает довольно много времени. В С# я мог бы сначала извлечь весь ZIP-файл где-нибудь, прежде чем работать с ним, но в идеале я хотел бы просто читать один файл за раз из ZIP-файла в память, не извлекая его в место на диске.

Я просмотрел собственные утилиты ZIP C # вместе с DotNetZip и SharpZipLib, но не видел ничего, что имело бы прямое отношение к тому, что мне нужно.

Можно ли это сделать и действительно ли это даст какие-либо преимущества в производительности по сравнению с простым извлечением?


person John 'Mark' Smith    schedule 28.08.2013    source источник
comment
Вы можете открыть Zip как Stream с любой из этих библиотек.   -  person Dustin Kingen    schedule 28.08.2013
comment
Память намного быстрее, чем дисковый ввод-вывод, поэтому вы должны увидеть значительный выигрыш в производительности от потоковой передачи, а не от извлечения.   -  person NWard    schedule 28.08.2013


Ответы (1)


Вы можете использовать DotNetZip для извлечения каждого имени файла (и его свойств) из zip-файла.

using (ZipFile zipFile = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry zip in zipFile)
  {
      System.Console.WriteLine("Zipfile: {0}", zip.FileName);
      System.Console.WriteLine("Zipfile: {0}", zip.Comment);
  }
}

См.: https://www.nuget.org/packages/DotNetZip/ Старый архив: https://archive.codeplex.com/?p=dotnetzip

person Daniel Abou Chleih    schedule 28.08.2013