static public GetExtraFields ( BinaryReader reader ) : List |
||
reader | BinaryReader | |
return | List |
static public List<ZipGenericExtraField> GetExtraFields(BinaryReader reader)
{
//assumes that TrySkipBlock has already been called, so we don't have to validate twice
List<ZipGenericExtraField> result;
const int OffsetToFilenameLength = 26; //from the point before the signature
reader.BaseStream.Seek(OffsetToFilenameLength, SeekOrigin.Current);
ushort filenameLength = reader.ReadUInt16();
ushort extraFieldLength = reader.ReadUInt16();
reader.BaseStream.Seek(filenameLength, SeekOrigin.Current);
using (Stream str = new SubReadStream(reader.BaseStream, reader.BaseStream.Position, extraFieldLength))
{
result = ZipGenericExtraField.ParseExtraField(str);
}
Zip64ExtraField.RemoveZip64Blocks(result);
return result;
}
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); }