Example #1
0
        /// <summary>
        /// Рекурсивное удаление директории
        /// </summary>
        static void RecursiveDeleteDir(Project.Dir d)
        {
            // Удаление файлов
            foreach (Project.Entry en in d.Entries)
            {
                // Флажок того что файл удалён
                en.Deleted = true;

                // Удаление файла
                try {
                    File.Delete(en.FullPath);
                } catch (Exception) { }
                MainForm.ProjectEntryEvent(en, FileEvent.Deleted);
            }

            // Удаление подпапок
            foreach (Project.Dir dr in d.Dirs)
            {
                RecursiveDeleteDir(dr);
            }

            // Удаление директории
            d.Deleted = true;
            try {
                Directory.Delete(d.FullPath);
            } catch (Exception) {
            }
            MainForm.ProjectDirEvent(d, FileEvent.Deleted);
        }
Example #2
0
 /// <summary>
 /// Получение директории из проекта по ее относительному пути
 /// </summary>
 /// <param name="name">Имя директории</param>
 /// <returns>Директория или null</returns>
 public static Project.Dir GetDir(string name)
 {
     // Поиск папки
     if (name.Length == 0)
     {
         return(null);
     }
     string[]    parts = name.Split(new char[] { '/', '\\' });
     Project.Dir d     = Project.BaseDir;
     for (int i = 0; i < parts.Length - 1; i++)
     {
         bool   found = false;
         string n     = parts[i].ToLower();
         foreach (Project.Dir dn in d.Dirs)
         {
             if (n == dn.Name.ToLower())
             {
                 d     = dn;
                 found = true;
                 break;
             }
         }
         if (!found)
         {
             return(null);
         }
     }
     return(d);
 }
Example #3
0
        /// <summary>
        /// Создание нового файла
        /// </summary>
        /// <param name="name">Имя файла</param>
        /// <param name="parent">Родительский каталог</param>
        /// <returns></returns>
        public static Entry CreateEntry(string name, Project.Dir parent)
        {
            // Поиск похожего
            List <Entry> fl = new List <Entry>(parent.Entries);

            foreach (Entry f in fl)
            {
                if (f.Name.ToLower() == name.ToLower())
                {
                    return(null);
                }
            }

            // Запись на диск
            File.Create(parent.FullPath + "/" + name).Close();

            // Создание файла
            Entry e = new Entry();

            e.Name   = name;
            e.Parent = parent;
            e.Icon   = Preview.Get(e.FullPath);
            fl.Add(e);
            fl.Sort((a, b) => {
                return(a.Name.CompareTo(b.Name));
            });
            parent.Entries = fl.ToArray();
            MainForm.ProjectEntryEvent(e, FileEvent.Created);
            return(e);
        }
Example #4
0
 /// <summary>
 /// Изменение имени директории
 /// </summary>
 /// <param name="d">Директория для переименовывания</param>
 /// <param name="newName">Новое имя</param>
 /// <returns>True если директория переименована</returns>
 public static bool RenameItem(Project.Dir d, string newName)
 {
     if (newName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
     {
         return(false);
     }
     if (newName != d.ShortName)
     {
         string oldfull = d.FullPath;
         d.Name = d.Parent == BaseDir ? newName : d.Parent.Name + "/" + newName;
         Directory.Move(oldfull, d.FullPath);
         RecursiveNotifyDir(d, FileEvent.Renamed);
     }
     return(true);
 }
Example #5
0
        /// <summary>
        /// Удаление директории
        /// </summary>
        /// <param name="d">Директория</param>
        /// <returns>True если директория удалена</returns>
        public static bool DeleteDir(Project.Dir d)
        {
            // Нельзя удалить корневую папку проекта
            if (d == BaseDir)
            {
                return(false);
            }

            // Рекурсивное удаление папки
            RecursiveDeleteDir(d);
            List <Project.Dir> dirs = new List <Dir>(d.Parent.Dirs);

            if (dirs.Contains(d))
            {
                dirs.Remove(d);
            }
            d.Parent.Dirs = dirs.ToArray();
            return(true);
        }
Example #6
0
 /// <summary>
 /// Событие изменения директории проекта
 /// </summary>
 public virtual void ProjectDirEvent(Project.Dir dr, Project.FileEvent ev)
 {
 }