/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Событие изменения директории проекта /// </summary> public virtual void ProjectDirEvent(Project.Dir dr, Project.FileEvent ev) { }