/// <summary>
        /// Builds a directory entry and populates its correct type, children and siblings.
        /// </summary>
        /// <param name="entry">The directory sector entry.</param>
        /// <param name="entries">The current entries.</param>
        /// <param name="sectors">The data sectors.</param>
        /// <param name="fat">The FAT.</param>
        /// <returns>The correct DirectoryEntry object.</returns>
        public static DirectoryEntry CreateEntry(DirectorySectorEntry entry,
                                                 DirectorySectorEntryCollection entries,
                                                 SectorCollection sectors,
                                                 Sect[] fat)
        {
            DirectoryEntry newEntry = null;

            switch (entry.Type)
            {
            case Stgty.Storage:
                newEntry = new StorageEntry(entry.Name);
                break;

            case Stgty.Stream:
                newEntry = new StreamEntry(entry.Name, entry.Size, entry.SectStart, sectors, fat);
                break;

            default:
                newEntry = new GenericDirectoryEntry(entry.Name, entry.Type);
                break;
            }

            if (!entry.LeftSibling.IsEof)
            {
                newEntry.LeftSibling = CreateEntry(entries[entry.LeftSibling],
                                                   entries,
                                                   sectors,
                                                   fat);
            }

            if (!entry.RightSibling.IsEof)
            {
                newEntry.RightSibling = CreateEntry(entries[entry.RightSibling],
                                                    entries,
                                                    sectors,
                                                    fat);
            }

            if (!entry.Child.IsEof)
            {
                newEntry.Child = CreateEntry(entries[entry.Child],
                                             entries,
                                             sectors,
                                             fat);
            }

            return(newEntry);
        }
		/// <summary>
		/// Builds a directory entry and populates its correct type, children and siblings.
		/// </summary>
		/// <param name="entry">The directory sector entry.</param>
		/// <param name="entries">The current entries.</param>
		/// <param name="sectors">The data sectors.</param>
		/// <param name="fat">The FAT.</param>
		/// <returns>The correct DirectoryEntry object.</returns>
		public static DirectoryEntry CreateEntry(DirectorySectorEntry entry, 
			DirectorySectorEntryCollection entries, 
			SectorCollection sectors, 
			Sect[] fat)
		{
			DirectoryEntry newEntry = null;
			switch(entry.Type)
			{
				case Stgty.Storage :
					newEntry = new StorageEntry(entry.Name);
					break;
				case Stgty.Stream :
					newEntry = new StreamEntry(entry.Name, entry.Size, entry.SectStart, sectors, fat);
					break;
				default:
					newEntry = new GenericDirectoryEntry(entry.Name, entry.Type);
					break;
			}

			if(!entry.LeftSibling.IsEof)
				newEntry.LeftSibling = CreateEntry(entries[entry.LeftSibling],
					entries,
					sectors,
					fat);

			if(!entry.RightSibling.IsEof)
				newEntry.RightSibling = CreateEntry(entries[entry.RightSibling],
					entries,
					sectors,
					fat);

			if(!entry.Child.IsEof)
				newEntry.Child = CreateEntry(entries[entry.Child],
					entries,
					sectors,
					fat);

			return newEntry;
		}