示例#1
0
        // Восстановить файлы/каталоги с помощью полного типа резервирования
        public static bool RestoreFull(ref Scenario scenario)
        {
            string Destination;
            int    version;

            if (scenario.Zip)
            {
                Destination = Path.GetDirectoryName(scenario.Destination) + "\\" + MakeCopy.exclude(scenario.Title);
            }
            else
            {
                Destination = scenario.Destination + exclude(scenario.Title);
            }
            // Определить самую последнюю копию
            version = GetLastVersion(Destination);

            // При необходимости переспросить у пользователя, какую версию использовать
            if (version > 1)
            {
                FormVersion FV = new FormVersion();
                for (int i = 0; i < version; i++)
                {
                    FV.comboBox.Items.Add(i + 1);
                }
                FV.comboBox.SelectedIndex = version - 1;
                FV.ShowDialog();
                version = FV.comboBox.SelectedIndex + 1;
            }

            // Сделать зеркальное восстановление
            return(RestoreMirror(ref scenario, version.ToString()));
        }
示例#2
0
        // Восстановить файлы/каталоги с помощью зеркального типа резервирования
        public static bool RestoreMirror(ref Scenario scenario, string version = "")
        {
            string Destination = scenario.Destination + exclude(scenario.Title);

            if (scenario.Zip)
            {
                Destination = Path.GetDirectoryName(scenario.Destination) + "\\" + MakeCopy.exclude(scenario.Title) + version + "\\" + Path.GetFileName(scenario.Destination);
            }

            ZipTarget = false;
            if (scenario.Zip)
            {
                ZipSource = true;

                // Проверить контрольную сумму
                if (!SHA512X.CheckSHA512(scenario.Destination))
                {
                    if (MessageBox.Show("Продолжить?", "Контрольная сумма архива повреждена или отсутствует", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
                    {
                        return(false);
                    }
                }
                try
                {
                    zip = ZipFile.Open(scenario.Destination, ZipArchiveMode.Read);
                }
                catch
                {
                    MessageBox.Show("Файл копии не найден", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }
                Destination = "";
            }
            else
            {
                ZipSource = false;
            };

            // Для всех файлов и каталогов из списка сделать точную копию (с созданием соответствующего подкаталога)
            bool result = true;

            foreach (var filename in scenario.Source)
            {
                if (filename[0] == '*')
                {
                    result &= RestoreDir(filename.Substring(1), Destination, version);
                }
                else
                {
                    result &= RestoreFile(filename, Destination, version, true);
                }
            }

            if (zip != null)
            {
                zip.Dispose();
            }

            return(result);
        }
示例#3
0
文件: Form1.cs 项目: knureigs/Backup
        private void buttonRestore_Click(object sender, EventArgs e)
        {
            ///!!!
            //MessageBox.Show("Восстановление данных по выбранному сценарию", "Справка");
            if (listBoxScenario.SelectedIndex < 0)
            {
                return;
            }
            Scenario s = list[listBoxScenario.SelectedIndex];

            switch (s.scenarioType)
            {
            case ScenarioType.полный:
                MakeCopy.RestoreFull(ref s);
                break;

            case ScenarioType.инкрементальный:
                MakeCopy.RestoreIncremental(ref s);
                break;

            case ScenarioType.дифференциальный:
                MakeCopy.RestoreDifferential(ref s);
                break;

            case ScenarioType.зеркальный:
                MakeCopy.RestoreMirror(ref s);
                break;
            }
            ;
            NextStep = true;
        }
示例#4
0
文件: Form1.cs 项目: knureigs/Backup
        private void buttonCopy_Click(object sender, EventArgs e)
        {
            //MessageBox.Show("Произведено резервное копирование по выбранному сценарию", "Справка");
            if (listBoxScenario.SelectedIndex < 0)
            {
                return;
            }
            Scenario s = list[listBoxScenario.SelectedIndex];

            switch (s.scenarioType)
            {
            case ScenarioType.полный:
                if (!MakeCopy.CopyFull(ref s))
                {
                    MessageBox.Show("Копия не сделана");
                }
                break;

            case ScenarioType.инкрементальный:
                MakeCopy.CopyIncremental(ref s);
                break;

            case ScenarioType.дифференциальный:
                MakeCopy.CopyDifferential(ref s);
                break;

            case ScenarioType.зеркальный:
                MakeCopy.CopyMirror(ref s);
                break;
            }
            ;
            NextStep = true;
        }
示例#5
0
        //-----------------------------------------------------------------------------------------//

        // Копировать файлы/каталоги с помощью полного типа резервирования
        public static bool CopyFull(ref Scenario scenario)
        {
            string Destination;
            int    version;

            if (scenario.Zip)
            {
                Destination = Path.GetDirectoryName(scenario.Destination) + "\\" + MakeCopy.exclude(scenario.Title);
            }
            else
            {
                Destination = scenario.Destination + exclude(scenario.Title);
            }
            // Определить последнюю версию
            version = GetLastVersion(Destination);

            if (IsIdentical(ref scenario, (version).ToString(), false))
            {
                return(false);
            }

            // Сделать зеркальную копию в новое место
            return(CopyMirror(ref scenario, (version + 1).ToString()));
        }
示例#6
0
        bool CheckValidPath(ref Scenario s)
        {
            //Типичные зловредности обычного пользователя
            if (s.Destination == "")
            {
                MessageBox.Show("Не задано место размещения резервной копии", s.Title);
                return(false);
            }

            if (!s.Zip)
            {
                if (s.Destination[s.Destination.Length - 1] != '\\')
                {
                    s.Destination += "\\";
                }

                string Destination = s.Destination + MakeCopy.exclude(s.Title);

                if (Directory.Exists(Destination))
                {
                    return(true);
                }

                try
                {
                    Directory.CreateDirectory(Destination);
                    return(true);
                }
                catch
                {
                    MessageBox.Show("Это какое-то неправильное место: " + Destination, s.Title);
                    return(false);
                }
            }
            else
            {
                if (s.Destination[s.Destination.Length - 1] == '\\')
                {
                    MessageBox.Show("Не задан файл для размещения резервной копии", s.Title);
                    return(false);
                }

                string Destination = Path.GetDirectoryName(s.Destination) + "\\" + MakeCopy.exclude(s.Title) + Path.GetFileName(s.Destination);

                if (File.Exists(Destination))
                {
                    return(true);
                }

                try
                {
                    File.WriteAllText(Destination, "Test File Create");
                    File.Delete(Destination);
                    return(true);
                }
                catch
                {
                    MessageBox.Show("Это какой-то неправильный файл: " + Destination, s.Title);
                    return(false);
                }
            }
        }
示例#7
0
        private void buttonRestore_Click(object sender, EventArgs e)
        {
            // Восстановление данных по выбранному сценарию
            if (listBoxScenario.SelectedIndex < 0)
            {
                return;
            }

            Scenario s = list[listBoxScenario.SelectedIndex];

            labelState.Text = "Восстановление " + s.Title;

            switch (s.scenarioType)
            {
            case ScenarioType.зеркальный:
                MakeCopy.RestoreMirror(ref s);
                break;

            case ScenarioType.полный:
                MakeCopy.RestoreFull(ref s);
                break;

            case ScenarioType.инкрементальный:
                MakeCopy.RestoreIncremental(ref s);
                break;

            case ScenarioType.дифференциальный:
                MakeCopy.RestoreDifferential(ref s);
                break;
            }
            ;
            NextStep        = true;
            labelState.Text = "Восстановление завершено";

            // Добавить в журнал сообщение о восстановлении
            using (StreamWriter sw = new StreamWriter(new FileStream(textBoxLogFile.Text, FileMode.Append)))
            {
                foreach (string log in MakeCopy.Log)
                {
                    sw.WriteLine(log);
                }
                MakeCopy.Log.Clear();
                sw.Write(DateTime.Now.ToString() + " ");
                sw.Write(s.ToString() + " ");
                sw.Write(" восстановление завершено");
                sw.WriteLine();
            }

            if (checkBoxMail.Checked)
            {
                try
                {
                    Mailer.SendMail(
                        textBoxSMTP.Text,
                        textBoxSender.Text,
                        textBoxPassword.Text,
                        textBoxEMail.Text,
                        "Резервное копирование: " + DateTime.Now.ToString() + " восстановление ",
                        s.ToString(),
                        textBoxLogFile.Text
                        );

                    labelState.Text += Environment.NewLine + "Почта отправлена!";
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
            }
        }
示例#8
0
        //-----------------------------------------------------------------------------------------//

        // Копировать файлы/каталоги с помощью зеркального типа резервирования
        public static bool CopyMirror(ref Scenario scenario, string version = "")
        {
            string Destination = scenario.Destination + exclude(scenario.Title);

            if (scenario.Zip)
            {
                Destination = Path.GetDirectoryName(scenario.Destination) + "\\" + MakeCopy.exclude(scenario.Title) + version + "\\" + Path.GetFileName(scenario.Destination);
            }

            ZipSource = false;
            zip       = null;
            if (scenario.Zip)
            {
                ZipTarget = true;
                if (File.Exists(scenario.Destination))
                {
                    File.Delete(scenario.Destination);
                }
                try
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(Destination));
                    zip = ZipFile.Open(Destination, ZipArchiveMode.Create);
                }
                catch
                {
                    return(false);
                }
                Destination = "";
            }
            else
            {
                ZipTarget = false;
            };

            // Для всех файлов и каталогов из списка сделать точную копию (с созданием соответствующего подкаталога)
            bool result = true;

            foreach (var filename in scenario.Source)
            {
                if (filename[0] == '*')
                {
                    result &= CopyDir(filename.Substring(1), Destination, version, true);
                }
                else
                {
                    result &= CopyFile(filename, Destination, version, true);
                }
            }
            if (zip != null)
            {
                zip.Dispose();
            }
            try
            {
                if (scenario.Zip) // Создать контрольную сумму для всего архива
                {
                    SHA512X.CreateSHA512(scenario.Destination);
                }
            }
            catch
            {
                return(false);
            }

            return(result);
        }