Exemple #1
0
        //добавить в архив
        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);
            }
        }
Exemple #2
0
        //восстановить с архива
        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);
        }