{ // Метод восстанавливающий состояние файла из бекапа сформированного BackupHandler public static byte[] Restore(byte[] file1, string workDirectory, CMapObject differences) { string type = differences.action; int[] adress = differences.changesAdress; byte[] result = default; byte[] buffer = default; if (differences.rawAdress != null) { buffer = File.ReadAllBytes($"{workDirectory}\\{differences.rawAdress}"); } switch (type) { case ("replace"): result = Replace(file1, adress, buffer); break; case ("remove"): result = Remove(file1, adress); break; case ("insert"): result = Insert(file1, adress, buffer); break; } return(result); }
public static void ApplyChangesToFilesList(List <string> neededBackups, List <FileObject> files, string workDirectory, bool onlyNames = false) { // Метод проходящийся по списку обновлений и применяющий их к относящимся файлам foreach (string backup in neededBackups) { if (Directory.GetFiles(backup).Contains($@"{backup}\changes")) { ChangesObject changes = JsonConvert.DeserializeObject <ChangesObject>(GetMapOrChanges($@"{backup}\changes")); for (int i = 0; i < files.Count; i++) { if (files[i] != null && files[i].path == changes.path) { if (changes.action == "remove") { files[i] = null; } else { files[i].path = changes.newPath; } } } } else if (Directory.GetFiles(backup).Contains($@"{backup}\multipleChanges")) { List <ChangesObject> multipleChanges = JsonConvert.DeserializeObject <List <ChangesObject> >(GetMapOrChanges($"{backup}\\multipleChanges")); foreach (ChangesObject changes in multipleChanges) { for (int i = 0; i < files.Count; i++) { if (files[i] != null && files[i].path == changes.path) { if (changes.action == "remove") { files[i] = null; } else { files[i].path = changes.newPath; } } } } } else if (Directory.GetFiles(backup).Contains($@"{backup}\cmap")) { if (!onlyNames) { CMapObject changesMap = JsonConvert.DeserializeObject <CMapObject>(GetMapOrChanges($@"{backup}\cmap")); for (int i = 0; i < files.Count; i++) { if (files[i] != null && changesMap.path == files[i].path) { files[i].body = RestoreHandler.Restore(files[i].body, workDirectory, changesMap); } } } } else if (Directory.GetFiles(backup).Contains($@"{backup}\map")) { Dictionary <string, string> map = JsonConvert.DeserializeObject <Dictionary <string, string> >(GetMapOrChanges($@"{backup}\map")); if (!onlyNames) { foreach (string name in map.Keys) { files.Add(new FileObject(name, File.ReadAllBytes($"{workDirectory}\\{map[name]}"))); } } else { foreach (string name in map.Keys) { files.Add(new FileObject(name, null)); } } } } }