コード例 #1
0
        public void CommitChanges()
        {
            _logger.WriteLine("Testing consistency...");
            if (TestConsistency())
            {
                _logger.WriteLine("Can't save broken database");
                return;
            }

            _logger.WriteLine("Saving...");

            for (int i = 0; i < _xDocuments.Length; i++)
            {
                int projectId = EcCard.GetProjectNumber(_xDocuments[i]);
                EcCard.UpdateAll(_xDocuments[i], _allCards.Where(c => c.ProjectNumber == projectId).OrderBy(c => c.ID));
            }

            // Make backups
            foreach (var fileName in _fileNames)
            {
                File.Delete($"{fileName}.5");
            }
            for (int i = 5; i > 0; i--)
            {
                foreach (var fileName in _fileNames)
                {
                    var dest = $"{fileName}.{i}";
                    var src  = fileName;
                    if (i > 1)
                    {
                        src += "." + (i - 1);
                    }

                    if (File.Exists(src))
                    {
                        File.Move(src, dest);
                    }
                }
            }

            for (int i = 0; i < _xDocuments.Length; i++)
            {
                _xDocuments[i].Save(_fileNames[i]);
            }
        }
コード例 #2
0
        public void LoadDocuments(FileInfo projectFile1, FileInfo projectFile2, FileInfo projectFile3)
        {
            // Load all documents
            _fileNames  = new[] { projectFile1.FullName, projectFile2.FullName, projectFile3.FullName };
            _xDocuments = new XDocument[3];
            _allCards   = new List <EcCard>();
            var projects = new HashSet <int>();

            for (int i = 0; i < _xDocuments.Length; i++)
            {
                _xDocuments[i] = XDocument.Load(_fileNames[i]);
                int projectId = EcCard.GetProjectNumber(_xDocuments[i]);
                if (!EcCard.ProjectIds.Contains(projectId))
                {
                    throw new Exception($"Project {i+1} has an invalid Project id of {projectId}");
                }
                if (projects.Contains(projectId))
                {
                    throw new Exception($"Project {projectId} already loaded");
                }
                projects.Add(projectId);
                _allCards.AddRange(EcCard.LoadAll(_xDocuments[i]));
            }
        }