コード例 #1
0
        /// <summary>
        /// Returns all directories.
        /// </summary>
        /// <param name="path">Path of directory.</param>
        public MochaCollectionResult <MochaDirectory> GetDirectories(MochaPath path)
        {
            var directories = new List <MochaDirectory>();

            if (!ExistsDisk(path.Path) && !ExistsDirectory(path))
            {
                return(new MochaCollectionResult <MochaDirectory>(directories));
            }

            var directoryRange = Database.GetXElement(
                $"FileSystem/{path.Path}").Elements().Where(
                x => x.Attribute("Type").Value == "Directory");

            for (int index = 0; index < directoryRange.Count(); index++)
            {
                MochaDirectory directory = GetDirectory($"{path.Path}/{directoryRange.ElementAt(index).Name.LocalName}");
                if (directory == null)
                {
                    continue;
                }

                directories.Add(directory);
            }

            return(new MochaCollectionResult <MochaDirectory>(directories));
        }
コード例 #2
0
        /// <summary>
        /// Add directory.
        /// </summary>
        /// <param name="directory">Directory to add.</param>
        /// <param name="path">Path to add.</param>
        public void AddDirectory(MochaDirectory directory, MochaPath path)
        {
            var parts = path.Path.Split('/');

            if (!ExistsDisk(parts[0]))
            {
                throw new MochaException("Disk not found!");
            }
            if (parts.Length != 1 && !ExistsDirectory(path.Path))
            {
                throw new MochaException("Directory not found!");
            }
            if (ExistsDirectory($"{path.Path}/{directory.Name}"))
            {
                throw new MochaException("This directory already exists!");
            }
            Database.OnChanging(this, new EventArgs());

            var originalname = path.Name();

            path = path.ParentPath();
            var element = Database.GetXElement(parts.Length == 1 ? "FileSystem" :
                                               $"FileSystem/{path.Path}").Elements().Where(x =>
                                                                                           (x.Attribute("Type").Value == "Disk" || x.Attribute("Type").Value == "Directory") &&
                                                                                           x.Name.LocalName == originalname).First();

            if (element == null)
            {
                return;
            }

            var xDirectory = new XElement(directory.Name);

            xDirectory.Add(new XAttribute("Type", "Directory"));
            xDirectory.Add(new XAttribute("Description", directory.Description));
            element.Add(xDirectory);

            for (int index = 0; index < directory.Files.Count; index++)
            {
                AddFile(directory.Files[index], path);
            }

            for (int index = 0; index < directory.Directories.Count; index++)
            {
                AddDirectory(directory.Directories[index], path);
            }

            if (directory.Files.Count == 0 || directory.Directories.Count == 0)
            {
                Database.Save();
            }
        }
コード例 #3
0
        /// <summary>
        /// Returns directory by path.
        /// </summary>
        /// <param name="path">Path of directory.</param>
        public MochaDirectory GetDirectory(MochaPath path)
        {
            if (!ExistsDirectory(path))
            {
                return(null);
            }

            var originalpath     = path.Path;
            var directoryElement = GetDirectoryElement(path);
            var directory        = new MochaDirectory(directoryElement.Name.LocalName);

            directory.Description = directoryElement.Attribute("Description").Value;
            directory.Files.AddRange(GetFiles(originalpath));
            directory.Directories.AddRange(GetDirectories(originalpath));

            return(directory);
        }