System.IO.Compression End of Central Directory record could not be found

Fiona picture Fiona · Sep 8, 2016 · Viewed 7.7k times · Source

On executing the following code.. I get an exception on the OpenRead statement:

End of Central Directory record could not be found.

I am however able to open the zip file with no issues through windows explorer.

Any thoughts?

string zipPath = @"c:\testfiles\MMM_C13000_2016M08.zip";
   using (ZipArchive archive = ZipFile.OpenRead(zipPath))
   {
       foreach (ZipArchiveEntry entry in archive.Entries)
       {
       }
   }

Answer

Mark Adler picture Mark Adler · Sep 8, 2016

It is possible to process a zip file in two different ways. You can simply read sequentially from the beginning, processing local headers and compressed data as you go. Or you can use the central directory at the end of the zip file to find the entries and process them by seeking in the file.

It appears that the zip file is damaged or has junk at the end that is preventing one method from working, but not the other.