/// <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;
        }