/// <summary> /// Get the binary data representing this instance. /// </summary> /// <returns>The raw binary data representing this instance.</returns> public byte[] GetData() { using (MemoryStream ms = new MemoryStream()) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { helperStream.IsStreamOwner = false; helperStream.WriteLEInt(0); // Reserved helperStream.WriteLEShort(1); // Tag helperStream.WriteLEShort(24); // Length = 3 x 8. helperStream.WriteLELong(this._lastModificationTime.ToFileTimeUtc()); helperStream.WriteLELong(this._lastAccessTime.ToFileTimeUtc()); helperStream.WriteLELong(this._createTime.ToFileTimeUtc()); return(ms.ToArray()); } }
/// <summary> /// Set the data from the raw values provided. /// </summary> /// <param name="data">The raw data to extract values from.</param> /// <param name="index">The index to start extracting values from.</param> /// <param name="count">The number of bytes available.</param> public void SetData(byte[] data, int index, int count) { using (MemoryStream ms = new MemoryStream(data, index, count, false)) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { // bit 0 if set, modification time is present // bit 1 if set, access time is present // bit 2 if set, creation time is present this._flags = (Flags)helperStream.ReadByte(); if (((this._flags & Flags.ModificationTime) != 0)) { int iTime = helperStream.ReadLEInt(); this._modificationTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) + new TimeSpan(0, 0, 0, iTime, 0); // Central-header version is truncated after modification time if (count <= 5) { return; } } if ((this._flags & Flags.AccessTime) != 0) { int iTime = helperStream.ReadLEInt(); this._lastAccessTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) + new TimeSpan(0, 0, 0, iTime, 0); } if ((this._flags & Flags.CreateTime) != 0) { int iTime = helperStream.ReadLEInt(); this._createTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) + new TimeSpan(0, 0, 0, iTime, 0); } } }