Мы используем DotNetZipLib для обработки zip-файлов.
У меня есть zip-файл, который содержит другой zip-файл, содержащий много (больших) файлов.
outerZipFile.zip
-> foo.ext
-> innerZipFile
-> file 1
-> file 2
-> bar.ext
Я хочу открыть внутренний zip-файл, без чтения всей записи в памяти одновременно или извлечения на жесткий диск. Я не нашел способа открыть внутреннюю запись как поток, потому что это вызывает исключение:
public void Foo(Stream source)
{
using (var zip = ZipFile.Read(source))
{
foreach (var entry in zip.Entries)
{
if (entry.FileName != "innerZipFile")
{
continue;
}
var stream = entry.OpenReader();
// throws 'Ionic.Zip.ZipException'
// Cannot read that as a ZipFile
var innerZip = ZipFile.Read(stream);
}
}
}
Есть ли способ открыть внутренний почтовый индекс из потока без чтения полных данных?
Моя цель — прочитать только некоторые из внутренних записей, не извлекая весь внутренний почтовый индекс (даже в память), потому что внутренний почтовый индекс может содержать до 1 ГБ данных.