public static FileDescriptor Create(EndianReader reader, BlockStream block) { FileDescriptor file = new FileDescriptor(); file.Name = reader.ReadString(0x28); byte namelen = reader.ReadByte(); file.Flags = (byte)(namelen & 0xC0); file.BlockSize = ReadUInt24LE(reader); if (ReadUInt24LE(reader) != file.BlockSize) { throw new FormatException(); } file.Block = ReadUInt24LE(reader); file.Parent = reader.ReadUInt16(); file.Size = reader.ReadUInt32(); file.UpdateTime = reader.ReadUInt32(); file.AccessTime = reader.ReadUInt32(); if ((file.Flags & 0x80) == 0) { file.Data = new Substream(block, block.GetBlockOffset(file.Block), file.Size); } return(file); }