Exemple #1
0
        // TODO: Update Backup Files!! #1
        // TODO: Создание нескольких точек восстановления #2 READY
        public void AddRestorePoint()
        {
            RestorePoint point = new RestorePoint(pID_++, true, DateTime.Now, BackupSize, Files);

            Points.Add(point);

            if (!Directory.Exists($"{App.DESTINATION_PATH}_{ID}"))
            {
                Directory.CreateDirectory($"{App.DESTINATION_PATH}_{ID}");
            }

            var zipFile = $@"{App.DESTINATION_PATH}_{ID}\RestorePoint_{point.ID}.zip";

            if (IsUnionAlgorithm)   // Объединённый алгоритм
            {
                using (var archive = ZipFile.Open(zipFile, ZipArchiveMode.Create)) {
                    foreach (var f in Files)
                    {
                        archive.CreateEntryFromFile(f.FilePath, Path.GetFileName(f.FilePath));
                    }
                }
            }
            else     // Разъединённый алгоритм
            {
                string tmpPath = "KeepingDirs";
                foreach (var f in Files)
                {
                    // Создаём папку для каждого файла с именем файла
                    string path = $@"{tmpPath}\{Path.GetFileNameWithoutExtension(f.FilePath)}";
                    Directory.CreateDirectory(path);
                    // Копируем каждый файл в соотв. папку
                    File.Copy(f.FilePath, $@"{path}\{Path.GetFileName(f.FilePath)}");
                }
                ZipFile.CreateFromDirectory(tmpPath, zipFile);
                Directory.Delete(tmpPath, true);
            }
        }
Exemple #2
0
        public void AddIncRestorePoint()
        {
            // 1. Берём последнюю полную точку
            RestorePoint lastFullPoint = Points.Where(p => p.IsFull == true).Last();
            // 2. Добавляем новые и изменившиеся файлы
            List <FileData> incFiles = new List <FileData>();

            foreach (var fBackup in Files)
            {
                if (lastFullPoint.Files.Where(f => f.FilePath == fBackup.FilePath).ToList().Count == 0)
                {
                    incFiles.Add(fBackup); // добавляем его в дельту
                }
                else                       // Если файл был в ТВ, то находим этот файл и чекаем дату и размер
                {
                    foreach (var fPoint in lastFullPoint.Files)
                    {
                        if (fBackup.FilePath == fPoint.FilePath)
                        {
                            if (fBackup.FileSize != fPoint.FileSize ||
                                fBackup.FileDate != fPoint.FileDate)
                            {
                                incFiles.Add(fBackup);
                            }
                        }
                    }
                }
            }
            // 3. Ищем новый поинт сайз
            double pointSize = 0;

            foreach (var f in incFiles)
            {
                pointSize += f.FileSize;
            }
            // 4. Добавляем новую инкрементную точку
            RestorePoint point = new RestorePoint(pID_++, false, DateTime.Now, pointSize, incFiles);

            Points.Add(point);

            // 5. New Zip File
            var zipFile = $@"{App.DESTINATION_PATH}_{ID}\RestorePoint_{point.ID}I{lastFullPoint.ID}.zip";

            // 6. Poehali!
            if (IsUnionAlgorithm)   // Объединённый алгоритм
            {
                using (var archive = ZipFile.Open(zipFile, ZipArchiveMode.Create)) {
                    foreach (var f in incFiles)
                    {
                        archive.CreateEntryFromFile(f.FilePath, Path.GetFileName(f.FilePath));
                    }
                }
            }
            else     // Разъединённый алгоритм
            {
                string tmpPath = "KeepingDirs";
                foreach (var f in incFiles)
                {
                    // Создаём папку для каждого файла с именем файла
                    string path = $@"{tmpPath}\{Path.GetFileNameWithoutExtension(f.FilePath)}";
                    Directory.CreateDirectory(path);
                    // Копируем каждый файл в соотв. папку
                    File.Copy(f.FilePath, $@"{path}\{Path.GetFileName(f.FilePath)}");
                }
                ZipFile.CreateFromDirectory(tmpPath, zipFile);
                Directory.Delete(tmpPath, true);
            }
        }