Beispiel #1
0
    {           // Метод восстанавливающий состояние файла из бекапа сформированного 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);
        }
Beispiel #2
0
        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));
                        }
                    }
                }
            }
        }