ZipArchive.Entries выдает исключение, если в заархивированной папке есть вложенные папки - PullRequest
0 голосов
/ 25 апреля 2019

На моем сервере я ожидаю получить некоторые сжатые документы JSON через TCP. Вот метод, который пытается распаковать полученную папку:

public static void Unzip(this Stream zippedFolderStream)
{
    var zipArchive = new ZipArchive(zippedFolderStream);
    ZipArchiveEntry[] archiveEntries = zipArchive.Entries.ToArray();

    Console.WriteLine($"Received {archiveEntries.Length} documents.");

    foreach (ZipArchiveEntry entry in archiveEntries)
    {
        // Do stuff.
    }
}

Если в zip-папке , а не содержатся какие-либо вложенные папки, код работает без сбоев - выполняется все, что заменено на // Do stuff. в приведенном выше примере.

Однако, если в заархивированной папке содержатся вложенные папки (которые сами не заархивированы), я сталкиваюсь с этой ошибкой:

System.IO.InvalidDataException
  HResult=0x80131501
  Message=Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.
  Source=System.IO.Compression
  StackTrace:
   at System.IO.Compression.ZipArchive.ReadCentralDirectory()
   at System.IO.Compression.ZipArchive.get_Entries()
   at TcpServer.StreamExtensions.Unzip(Stream zippedFolderStream) in C:\Users\Me\source\repos\TcpServer\TcpServer\StreamExtensions.cs:line 16
   ... etc.

У меня такой вопрос: как я могу просмотреть все документы JSON внутри сжатой папки, даже если они хранятся во вложенных папках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...