예제 #1
0
 private void ParseRecord(BinaryReader reader, long centralDirectoryOffset, int centralDirectoryCount, long expectedCentralDirectorySize)
 {
     if (centralDirectoryCount > 0)
     {
         SortedList list = new SortedList(centralDirectoryCount);
         for (int i = 0; i < centralDirectoryCount; i++)
         {
             ZipIOCentralDirectoryFileHeader header2 = ZipIOCentralDirectoryFileHeader.ParseRecord(reader, this._blockManager.Encoding);
             list.Add(header2.OffsetOfLocalHeader, header2);
         }
         if ((reader.BaseStream.Position - centralDirectoryOffset) > expectedCentralDirectorySize)
         {
             throw new FileFormatException(SR.Get("CorruptedData"));
         }
         foreach (ZipIOCentralDirectoryFileHeader header in list.Values)
         {
             this.CentralDirectoryDictionary.Add(header.FileName, header);
         }
         this._centralDirectoryDigitalSignature = ZipIOCentralDirectoryDigitalSignature.ParseRecord(reader);
     }
     this._offset    = centralDirectoryOffset;
     this._dirtyFlag = false;
     this.Validate(expectedCentralDirectorySize);
 }