public void Read(BinaryReader pBR, int pStartOffset) { IDEntries = new Dictionary <int, ResourceDirectoryEntry>(); Characteristics = pBR.ReadInt32(); pBR.ReadInt32(); MajorVersion = pBR.ReadUInt16(); MinorVersion = pBR.ReadUInt16(); AmountONamefEntries = pBR.ReadUInt16(); AmountOfIDEntries = pBR.ReadUInt16(); for (int i = 0; i < AmountOfIDEntries; i++) { ResourceDirectoryEntry rde = new ResourceDirectoryEntry(); rde.Read(pBR, pStartOffset); IDEntries.Add(rde.Name, rde); } foreach (var kvp in IDEntries) { pBR.BaseStream.Position = pStartOffset + kvp.Value.OffsetToData; kvp.Value.ReadInner(pBR, pStartOffset); } }
public ResourceEntry GetEntryInfo(int id) { if (IsLeaf) { throw new Exception("Is a leaf"); } ResourceDirectory rd = (ResourceDirectory)InnerObject; if (!rd.IDEntries.ContainsKey(id)) { return(null); } ResourceDirectoryEntry rde = rd.IDEntries[id]; if (rde.IsLeaf) { throw new Exception("Entry with ID is a leaf!"); } ResourceDirectory rd2 = (ResourceDirectory)rde.InnerObject; ResourceDirectoryEntry rde2 = rd2.IDEntries.First().Value; if (!rde2.IsLeaf) { throw new Exception("Entry with ID is NOT a leaf!"); } return(rde2.InnerObject as ResourceEntry); }