/// <summary>
        ///
        /// </summary>
        /// <param name="Path"></param>
        /// <returns></returns>
        public IEnumerable <FileSystemEntry> FindFiles(String Path)
        {
            FileSystem NewFileSystem; String NewPath; Access(Path, out NewFileSystem, out NewPath);

            return(NewFileSystem.FindMountedFiles(NewPath)
                   .Concat(NewFileSystem.ImplFindFiles(NewPath))
                   .DistinctByKey(FileSystemEntry => FileSystemEntry.Name)
                   .Select(FileSystemEntry => FilterFileSystemEntry(FileSystemEntry))
                   );
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Path"></param>
        /// <param name="Mode"></param>
        /// <param name="ThrowErrorIfNotExists"></param>
        public void CreateDirectory(String Path, int Mode = 0777, bool ThrowErrorIfNotExists = true)
        {
            FileSystem NewFileSystem; String NewPath; Access(Path, out NewFileSystem, out NewPath);

            if (ThrowErrorIfNotExists)
            {
                NewFileSystem.ImplCreateDirectory(NewPath, Mode);
            }
            else
            {
                try
                {
                    NewFileSystem.ImplCreateDirectory(NewPath, Mode);
                }
                catch
                {
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="FileMode"></param>
        /// <returns></returns>
        public FileSystemFileStream OpenFile(String FileName, FileMode FileMode)
        {
            FileSystem NewFileSystem; String NewFileName; Access(FileName, out NewFileSystem, out NewFileName);

            return(NewFileSystem.ImplOpenFile(NewFileName, FileMode));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Path"></param>
        public void DeleteDirectory(String Path)
        {
            FileSystem NewFileSystem; String NewPath; Access(Path, out NewFileSystem, out NewPath);

            NewFileSystem.ImplDeleteDirectory(NewPath);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Path"></param>
        /// <returns></returns>
        public FileSystemEntry GetFileInfo(String Path)
        {
            FileSystem NewFileSystem; String NewPath; Access(Path, out NewFileSystem, out NewPath);

            return(NewFileSystem.ImplGetFileInfo(NewPath));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Path"></param>
        /// <param name="FileTime"></param>
        public void SetFileTime(String Path, FileSystemEntry.FileTime FileTime)
        {
            FileSystem NewFileSystem; String NewPath; Access(Path, out NewFileSystem, out NewPath);

            NewFileSystem.ImplSetFileTime(NewPath, FileTime);
        }