46 {
47 header =
default(ZipCentralDirectoryFileHeader);
48 if (reader.ReadUInt32() != 33639248)
49 {
50 return false;
51 }
52 header.VersionMadeBySpecification = reader.ReadByte();
53 header.VersionMadeByCompatibility = reader.ReadByte();
54 header.VersionNeededToExtract = reader.ReadUInt16();
55 header.GeneralPurposeBitFlag = reader.ReadUInt16();
56 header.CompressionMethod = reader.ReadUInt16();
57 header.LastModified = reader.ReadUInt32();
58 header.Crc32 = reader.ReadUInt32();
59 uint num = reader.ReadUInt32();
60 uint
num2 = reader.ReadUInt32();
61 header.FilenameLength = reader.ReadUInt16();
62 header.ExtraFieldLength = reader.ReadUInt16();
63 header.FileCommentLength = reader.ReadUInt16();
64 ushort
num3 = reader.ReadUInt16();
65 header.InternalFileAttributes = reader.ReadUInt16();
66 header.ExternalFileAttributes = reader.ReadUInt32();
67 uint
num4 = reader.ReadUInt32();
68 header.Filename = reader.ReadBytes(
header.FilenameLength);
73 long position = reader.BaseStream.Position +
header.ExtraFieldLength;
75 using (
Stream stream =
new SubReadStream(reader.BaseStream, reader.BaseStream.Position,
header.ExtraFieldLength))
76 {
78 {
79 header.ExtraFields = ZipGenericExtraField.ParseExtraField(
stream);
81 }
82 else
83 {
84 header.ExtraFields = null;
86 }
87 }
88 reader.BaseStream.AdvanceToPosition(position);
90 {
91 header.FileComment = reader.ReadBytes(
header.FileCommentLength);
92 }
93 else
94 {
95 reader.BaseStream.Position +=
header.FileCommentLength;
96 header.FileComment = null;
97 }
102 return true;
103 }