Это зависит от того, как был создан fileStream
. Он был создан из файла на диске? Если да, то ZipArchive
будет читать с диска по мере необходимости. Он не будет помещать все в память, а затем читать. Это было бы невероятно неэффективно.
У меня большой опыт в этом ... Я работал над проектом, в котором мне пришлось разархивировать 25 ГБ. ZIP-файлы. . NET s ZipArchive
был очень быстрым и очень эффективным с точки зрения памяти.
Вы можете иметь MemoryStream
s, которые содержат данные, из которых ZipArchive
может читать, поэтому вы не ограничены только Zip файлы на диске.
Вот несколько эффективный способ распаковать ZipArchive
:
var di = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyDirectoryToExtractTo"));
var filesToExtract = _zip.Entries.Where(x =>
!string.IsNullOrEmpty(x.Name) &&
!x.FullName.EndsWith("/", StringComparison.Ordinal));
foreach(var x in filesToExtract)
{
var fi = new FileInfo(Path.Combine(di.FullName, x.FullName));
if (!fi.Directory.Exists) { fi.Directory.Create(); }
using (var i = x.Open())
using (var o = fi.OpenWrite())
{
i.CopyTo(o);
}
}
Это распакует все файлы в C:\ProgramData\MyDirectoryToExtractTo\
с сохранением структуры каталогов.
Если вы хотите увидеть, как ZipArchive
был реализован для проверки, возьмите , посмотрите здесь .