// 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); } }
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); } }