/// <summary> /// deserializes one directory item entry from the stream. /// </summary> /// <param name="dataReader">the stream to deserialize from.</param> /// <returns>the deserialized item.</returns> private VirtualItem DeserializeDirectoryItem(DataReader dataReader) { uint itemFirstBlockIndex = dataReader.ReadUInt32(); var itemType = (ItemType) dataReader.ReadByte(); string itemName = dataReader.ReadString(); if (itemType == ItemType.Directory) { return new VirtualDirectory(itemFirstBlockIndex, itemName, this, ContainerFile); } return new VirtualFile(itemFirstBlockIndex, itemName, this, ContainerFile); }
/// <summary> /// reads all items stored in this directory. /// </summary> /// <returns>an enumeration of all items in this directory.</returns> public IEnumerable<VirtualItem> ReadAllItems() { FileStream fileStream = GetFileStream(); long currentSize = BitConverter.ToInt64(fileStream.Read(8), 0); byte[] allData = fileStream.Read(currentSize); var dataReader = new DataReader(allData); var allItems = new List<VirtualItem>(); while (dataReader.Position < dataReader.Length) { allItems.Add(DeserializeDirectoryItem(dataReader)); } return allItems; }