Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ZipCentralDirectoryFileHeader.cs
Go to the documentation of this file.
2
4
6{
8
10
12
13 public ushort GeneralPurposeBitFlag;
14
15 public ushort CompressionMethod;
16
17 public uint LastModified;
18
19 public uint Crc32;
20
21 public long CompressedSize;
22
23 public long UncompressedSize;
24
25 public ushort FilenameLength;
26
27 public ushort ExtraFieldLength;
28
29 public ushort FileCommentLength;
30
31 public int DiskNumberStart;
32
34
36
38
39 public byte[] Filename;
40
41 public byte[] FileComment;
42
44
46 {
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;
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 }
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 }
104}
virtual byte ReadByte()
virtual ushort ReadUInt16()
virtual Stream BaseStream
virtual byte[] ReadBytes(int count)
virtual uint ReadUInt32()
static Zip64ExtraField GetAndRemoveZip64Block(List< ZipGenericExtraField > extraFields, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber)
static Zip64ExtraField GetJustZip64Block(Stream extraFieldStream, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber)
static bool TryReadBlock(BinaryReader reader, bool saveExtraFieldsAndComments, out ZipCentralDirectoryFileHeader header)
static List< ZipGenericExtraField > ParseExtraField(Stream extraFieldData)