Как я указал в вопросе, я пометил ваш в основном как дубликат, вам нужно открыть внутренний zip-файл.
Я бы изменил ваш метод «открыть из файла» следующим образом:
// Open ZipArchive from a file
public bool findPng(zipPath) {
using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
return findPng(archive);
}
}
И затем есть отдельный метод, который принимает ZipArchive
, чтобы вы могли вызывать его рекурсивно, открывая запись как Stream
как , продемонстрированную здесь
// Search ZipArchive for PNG
public bool findPng(ZipArchive archive)
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
string s = entry.FullName;
if (s.EndsWith(".zip"))
{
// Open inner zip and pass to same method
using (ZipArchive innerArchive = new ZipArchive(entry.Open()))
{
if (findPng(innerArchive))
return true;
}
}
/* same as above with folders within the zip */
if(s.EndsWith(".png"))
return true;
}
return false;
}
}
В качестве оптимизации я бы рекомендовал проверить все имена файлов перед обработкой вложенных zip-файлов.