internal bool LoadLocalHeaderExtraFieldAndCompressedBytesIfNeeded() { if (this._originallyInArchive) { this._archive.ArchiveStream.Seek(this._offsetOfLocalHeader, SeekOrigin.Begin); this._lhUnknownExtraFields = ZipLocalFileHeader.GetExtraFields(this._archive.ArchiveReader); } if (!this._everOpenedForWrite && this._originallyInArchive) { this._compressedBytes = new byte[checked ((IntPtr)this._compressedSize)]; this._archive.ArchiveStream.Seek(this.OffsetOfCompressedData, SeekOrigin.Begin); ZipHelper.ReadBytes(this._archive.ArchiveStream, this._compressedBytes, (int)this._compressedSize); } return(true); }
// returns false if fails, will get called on every entry before closing in update mode // can throw InvalidDataException internal bool LoadLocalHeaderExtraFieldAndCompressedBytesIfNeeded() { string message; // we should have made this exact call in _archive.Init through ThrowIfOpenable Debug.Assert(IsOpenable(false, true, out message)); // load local header's extra fields. it will be null if we couldn't read for some reason if (_originallyInArchive) { _archive.ArchiveStream.Seek(_offsetOfLocalHeader, SeekOrigin.Begin); _lhUnknownExtraFields = ZipLocalFileHeader.GetExtraFields(_archive.ArchiveReader); } if (!_everOpenedForWrite && _originallyInArchive) { // we know that it is openable at this point _compressedBytes = new byte[(_compressedSize / MaxSingleBufferSize) + 1][]; for (int i = 0; i < _compressedBytes.Length - 1; i++) { _compressedBytes[i] = new byte[MaxSingleBufferSize]; } _compressedBytes[_compressedBytes.Length - 1] = new byte[_compressedSize % MaxSingleBufferSize]; _archive.ArchiveStream.Seek(OffsetOfCompressedData, SeekOrigin.Begin); for (int i = 0; i < _compressedBytes.Length - 1; i++) { ZipHelper.ReadBytes(_archive.ArchiveStream, _compressedBytes[i], MaxSingleBufferSize); } ZipHelper.ReadBytes(_archive.ArchiveStream, _compressedBytes[_compressedBytes.Length - 1], (int)(_compressedSize % MaxSingleBufferSize)); } return(true); }