//добавить в архив public static void AddToArchive() { //создаём объект архиватор BackUper backUper = DialogConsole.InstanceBackUper(); try { //получаем папку с файлами для архивипрвания DirectoryInfo directoryRun = new DirectoryInfo(backUper.Path); //папка где создаём архив DirectoryInfo CurrentDirectory = new DirectoryInfo(backUper.PathForCreateDirectoryArchive); //создаём архив CurrentDirectory.CreateSubdirectory(backUper.nameArhive); //создаём в папке фаил логирования FileStream stream = new FileStream(backUper.PathLogFile, FileMode.OpenOrCreate, FileAccess.Read); stream.Close(); //запускаем процес создания бэкапов backUper.BackUpData(directoryRun); } catch (System.IO.DirectoryNotFoundException exception) { Console.WriteLine(exception.Message); } }
//восстановить с архива public static void RestoreFromArchive() { //получаем информацию для архивирования BackUper backUper = DialogConsole.InstanceBackUper(); try { using (Stream stream = new FileStream(backUper.PathLogFile, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(stream)) { //считываем лог фаил string data = reader.ReadToEnd(); //регулярное выражения записи резервного копирования файла string pattern = @".*\s*(\d\d).(\d\d).(\d{2,4}).*]\s*(?<origFile>.+?)\s*->\s*(?<archiveFile>.+)\b"; bool s = Regex.IsMatch(data, pattern); //если по регулярному выражению найдено хоть 1 соответствие if (Regex.IsMatch(data, pattern)) { //получаем соответствие Match match = Regex.Match(data, pattern); //повторяем пока попытки получения следующего удачные while (match.Success) { //получаем путь к файлу оригиналу string fileOriginalPath = match.Groups["origFile"].Value; //если фаил отсутствует, будем его копировать из архивабэкапов if (!File.Exists(fileOriginalPath)) { //ищим самый свежий бэкап в архиве string fileBackUpPath = SearchBackUpInfo(data, pattern, fileOriginalPath); File.Copy(fileBackUpPath, fileOriginalPath); } //переходим к следующему совпадению match = match.NextMatch(); } } } } } catch (System.IO.DirectoryNotFoundException exception) { Console.WriteLine(exception.Message); } }
public static void Menu() { do { int answer = -1; //выбраный пользователем пункт меню string data = null; //считываемая строка Console.WriteLine("Menu: "); Console.WriteLine($"{(int)MenuEnum.AddToArchiveFiles} - Add to arhive,"); Console.WriteLine($"{(int)MenuEnum.RestoreFromArchiveFiles} - Restore from arhive,"); Console.WriteLine($"{(int)MenuEnum.Exit} - Exit"); do { Console.Write("your choice: "); data = Console.ReadLine(); } while (!int.TryParse(data, out answer)); switch ((MenuEnum)answer) { case MenuEnum.AddToArchiveFiles: BackUper.AddToArchive(); Console.WriteLine("Done!"); break; case MenuEnum.RestoreFromArchiveFiles: BackUper.RestoreFromArchive(); Console.WriteLine("Done!"); break; case MenuEnum.Exit: Environment.Exit(0); break; default: Console.WriteLine("error menu iteam..."); break; } Console.ReadKey(); Console.Clear(); } while (true); }
public static BackUper InstanceBackUper() { //создаём объект архиватор BackUper backUper = new BackUper(); //запрашиваем путь к папке для перебора содержимого Console.Write(@"Enter directory path(for example D:\books\): "); backUper.Path = Console.ReadLine(); //backUper.Path = @"D:\ШАГ\books\"; Console.Write(@"Enter arhive directory path (for example D:\): "); backUper.PathForCreateDirectoryArchive = Console.ReadLine(); //backUper.PathForCreateDirectoryArchive = @"D:\"; //получаем дату поиска backUper.SearchDate = GetData(); //backUper.SearchDate = new DateTime(2016, 2, 24, 0, 0, 0); return(backUper); }