using System.Collections.Generic; namespace DTLib.Filesystem { public static class Directory { public static bool Exists(string dir) => System.IO.Directory.Exists(dir); // создает папку, если её не существует public static void Create(string dir) { if(!Directory.Exists(dir)) { // проверяет существование папки, в которой нужно создать dir if(dir.Contains("\\")&&!Directory.Exists(dir.Remove(dir.LastIndexOf('\\')))) Create(dir.Remove(dir.LastIndexOf('\\'))); System.IO.Directory.CreateDirectory(dir); } } // копирует все файлы и папки public static void Copy(string source_dir, string new_dir, bool owerwrite = false) { Create(new_dir); var subdirs = new List(); List files = GetAllFiles(source_dir, ref subdirs); for(int i = 0; i have copied to <", "c", newfile, "b", ">\n'" }); } } // копирует все файлы и папки и выдаёт список конфликтующих файлов public static void Copy(string source_dir, string new_dir, out List conflicts, bool owerwrite = false) { conflicts=new List(); var subdirs = new List(); List files = GetAllFiles(source_dir, ref subdirs); Create(new_dir); for(int i = 0; i have copied to <", "c", newfile, "b", ">\n'" }); } } // удаляет папку со всеми подпапками и файлами public static void Delete(string dir) { var subdirs = new List(); List files = GetAllFiles(dir, ref subdirs); for(int i = 0; i=0; i--) { PublicLog.Log($"deleting {subdirs[i]}\n"); if(Directory.Exists(subdirs[i])) System.IO.Directory.Delete(subdirs[i], true); } PublicLog.Log($"deleting {dir}\n"); if(Directory.Exists(dir)) System.IO.Directory.Delete(dir, true); } public static string[] GetFiles(string dir) => System.IO.Directory.GetFiles(dir); public static string[] GetFiles(string dir, string searchPattern) => System.IO.Directory.GetFiles(dir, searchPattern); public static string[] GetDirectories(string dir) => System.IO.Directory.GetDirectories(dir); // выдает список всех файлов public static List GetAllFiles(string dir) { var all_files = new List(); string[] cur_files = Directory.GetFiles(dir); for(int i = 0; i\n" }); } string[] cur_subdirs = Directory.GetDirectories(dir); for(int i = 0; i\n" }); all_files.AddRange(GetAllFiles(cur_subdirs[i])); } return all_files; } // выдает список всех файлов и подпапок в папке public static List GetAllFiles(string dir, ref List all_subdirs) { var all_files = new List(); string[] cur_files = Directory.GetFiles(dir); for(int i = 0; i\n" }); } string[] cur_subdirs = Directory.GetDirectories(dir); for(int i = 0; i\n" }); all_files.AddRange(GetAllFiles(cur_subdirs[i], ref all_subdirs)); } return all_files; } public static string GetCurrent() => System.IO.Directory.GetCurrentDirectory(); public static void GrantAccess(string fullPath) { var dirInfo = new System.IO.DirectoryInfo(fullPath); System.Security.AccessControl.DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); dirSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule( new System.Security.Principal.SecurityIdentifier( System.Security.Principal.WellKnownSidType.WorldSid, null), System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.InheritanceFlags.ObjectInherit| System.Security.AccessControl.InheritanceFlags.ContainerInherit, System.Security.AccessControl.PropagationFlags.NoPropagateInherit, System.Security.AccessControl.AccessControlType.Allow)); dirInfo.SetAccessControl(dirSecurity); } } }