/// Retrieve multiple directories from the given directory.
        //public static FilesystemEntry[] GetDirectories(string aDir)
        //{
        //    // Cosmos.Debug.Debugger.SendMessage("GetDirectories", "Checking for nullreference");
        //    if (aDir == null)
        //    {
        //        throw new ArgumentNullException("aDir is null");
        //    }

        //    // Cosmos.Debug.Debugger.SendMessage("GetDirectories", "Checking if " + aDir + " exists");
        //    //if (!Directory.Exists(aDir))
        //    //{
        //    //    throw new DirectoryNotFoundException("Unable to find directory " + aDir);
        //    //}

        //    // Cosmos.Debug.Debugger.SendMessage("GetDirectories", "About to GetDirectoryListing");

        //    var xDir = VFSManager.GetDirectoryEntry(Path.GetDirectoryName(aDir));
        //    ///// Cosmos.Debug.Debugger.SendMessage("GetDirectories", xDir.Name + " with ID " + xDir.Id.ToString());
        //    var xEntries = VFSManager.GetDirectoryListing(xDir);
        //    //var xEntries = VFSManager.GetDirectoryListing(Path.GetDirectoryName(aDir));
        //    //List<FilesystemEntry> xDirectories = new List<FilesystemEntry>();
        //    //for (int i = 0; i < xEntries.Length; i++)
        //    //{
        //    //    if (xEntries[i].IsDirectory)
        //    //    {
        //    //        xDirectories.Add(xEntries[0]);
        //    //    }
        //    //}

        //    ////foreach (FilesystemEntry entry in xEntries)
        //    ////    if (entry.IsDirectory)
        //    ////        xDirectories.Add(entry);


        //    ////return (from xEntry in GetDirectoryListing(aDir) where xEntry.IsDirectory select xEntry).ToArray();
        //    //// Cosmos.Debug.Debugger.SendMessage("GetDirectories", "Returning");
        //    //return xDirectories.ToArray();
        //    return new FilesystemEntry[0];
        //}


        /// <summary>
        /// Retrieve a specific file with the given path.
        /// </summary>
        /// <param name="aFile"></param>
        /// <returns></returns>
        public static FilesystemEntry GetFileEntry(String aFile)
        {
            // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Searching for file " + aFile);
            string xFileName = Path.GetFileName(aFile);
            // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Filename is " + xFileName);

            //Find the directory first.
            var xDirectory = VFSManager.GetDirectoryEntry(Path.GetDirectoryName(aFile) + Path.DirectorySeparatorChar);

            // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Directory is " + xDirectory.Name);

            //Then find file in that directory
            //var xFS = GetFileSystemFromPath(aFile, 1);
            //// Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Got filesystem");

            //FilesystemEntry[] xEntries = xFS.GetDirectoryListing(xDirectory.Id);
            //// Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Got Directory Listing");

            FilesystemEntry[] xEntries = VFSManager.GetDirectoryListing(xDirectory);
            // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Found " + xEntries.Length + " entries");

            foreach (FilesystemEntry xEntry in xEntries)
            {
                // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "Matching " + xEntry.Name + " with " + xFileName);
                if (xEntry.Name.Equals(xFileName))
                {
                    return(xEntry);
                }
            }

            //throw new FileNotFoundException();
            // Cosmos.Debug.Debugger.SendMessage("GetFileEntry", "File not found: " + aFile);
            return(null);
        }
        /// <summary>
        /// Checks if the given directory exists on disk.
        /// </summary>
        /// <param name="aDir">Can be both relative and absolute path.</param>
        /// <returns></returns>
        public static bool DirectoryExists(string aDir)
        {
            try
            {
                string xDir = aDir + Path.DirectorySeparatorChar;
                return(VFSManager.GetDirectoryEntry(Path.GetDirectoryName(xDir)) != null);

                //string xDir = aDir + Path.DirectorySeparatorChar;
                //var xEntries = GetDirectoryListing(Path.GetDirectoryName(xDir));
                //string xDirName = Path.GetFileName(xDir);
                //for (int i = 0; i < xEntries.Length; i++)
                //{
                //    if (xEntries[i].Name.Equals(xDirName))
                //    {
                //        return xEntries[i].IsDirectory;
                //    }
                //}
                //return false;
            }
            catch (Exception)
            {
                // Cosmos.Debug.Debugger.SendError("VFSManager.cs", e.Message);
                return(false);
            }
        }