Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryReadBlock()

static bool System.IO.Compression.ZipCentralDirectoryFileHeader.TryReadBlock ( BinaryReader reader,
bool saveExtraFieldsAndComments,
out ZipCentralDirectoryFileHeader header )
inlinestatic

Definition at line 45 of file ZipCentralDirectoryFileHeader.cs.

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);
69 bool readUncompressedSize = num2 == uint.MaxValue;
70 bool readCompressedSize = num == uint.MaxValue;
71 bool readLocalHeaderOffset = num4 == uint.MaxValue;
72 bool readStartDiskNumber = num3 == ushort.MaxValue;
73 long position = reader.BaseStream.Position + header.ExtraFieldLength;
74 Zip64ExtraField zip64ExtraField;
75 using (Stream stream = new SubReadStream(reader.BaseStream, reader.BaseStream.Position, header.ExtraFieldLength))
76 {
78 {
79 header.ExtraFields = ZipGenericExtraField.ParseExtraField(stream);
80 zip64ExtraField = Zip64ExtraField.GetAndRemoveZip64Block(header.ExtraFields, readUncompressedSize, readCompressedSize, readLocalHeaderOffset, readStartDiskNumber);
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 }
98 header.UncompressedSize = ((!zip64ExtraField.UncompressedSize.HasValue) ? num2 : zip64ExtraField.UncompressedSize.Value);
99 header.CompressedSize = ((!zip64ExtraField.CompressedSize.HasValue) ? num : zip64ExtraField.CompressedSize.Value);
100 header.RelativeOffsetOfLocalHeader = ((!zip64ExtraField.LocalHeaderOffset.HasValue) ? num4 : zip64ExtraField.LocalHeaderOffset.Value);
101 header.DiskNumberStart = ((!zip64ExtraField.StartDiskNumber.HasValue) ? num3 : zip64ExtraField.StartDiskNumber.Value);
102 return true;
103 }

References System.IO.BinaryReader.BaseStream, System.IO.Compression.Zip64ExtraField.GetAndRemoveZip64Block(), System.IO.Compression.Zip64ExtraField.GetJustZip64Block(), System.IO.Compression.ZipGenericExtraField.ParseExtraField(), System.IO.BinaryReader.ReadByte(), System.IO.BinaryReader.ReadBytes(), System.IO.BinaryReader.ReadUInt16(), System.IO.BinaryReader.ReadUInt32(), and System.stream.

Referenced by System.IO.Compression.ZipArchive.ReadCentralDirectory().