コード例 #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
        //-----------------------------------------------------------------------------------------//

        // Копировать файлы/каталоги с помощью полного типа резервирования
        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()));
        }
コード例 #4
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);
                }
            }
        }
コード例 #5
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);
        }