Exemple #1
0
        private static void SyncTransaction(IFileSystemManager manager, SyncFile nonActualFile, SyncFile actualFile)
        {
            // потом удаляем забекапленный неактуальный файл
            manager.DeleteFile(nonActualFile.FullPath);

            // и создаем новый файл как копию актуального на месте удаленного неактуального
            manager.CopyFile(actualFile.FullPath, nonActualFile.FullPath);
        }
Exemple #2
0
        /// <summary>
        /// Установка первого файла синхропары
        /// </summary>
        /// <param name="file">метаописание SyncFile</param>
        public void SetFirstFile(SyncFile file)
        {
            if (file == null)
            {
                throw new ArgumentNullException();
            }

            _file1 = file;
        }
Exemple #3
0
        private static void SyncTransactionWithBackup(IFileSystemManager manager, SyncFile nonActualFile, SyncFile actualFile, string backupDirPath)
        {
            // в самом начале делаем бекап неактуального файла в директории с исполняемым файлом
            manager.CopyFile(nonActualFile.FullPath,
                             String.Format("{3}\\{0}[{1:yyyy-MM-dd HH-mm-ss}]{2}", //AppDomain.CurrentDomain.BaseDirectory +
                                           Path.GetFileNameWithoutExtension(nonActualFile.FullPath),
                                           SystemTime.Now(), Path.GetExtension(nonActualFile.FullPath), backupDirPath));

            SyncTransaction(manager, nonActualFile, actualFile);
        }
Exemple #4
0
        public void InitializeTest()
        {
            // создаём тестовый набор данных:
            var file1Path = @"C:\some_folder\some_file1.csv";
            var file1Meta = new FileMetadata { ByteSize = _file1ByteSize, LastModified = _file1LastModified };

            var filesRepo = new SortedList<string, FileMetadata>
            {
                {file1Path, file1Meta}
            };

            // делаем иньекцию тестового менеджера файловой системы
            _injectedManager = new MockFileSystemManager(filesRepo);
            _file1 = new SyncFile(file1Path, _injectedManager);
        }
Exemple #5
0
        /// <summary>
        /// Установка второго файла синхропары
        /// </summary>
        /// <param name="file">метаописание SyncFile</param>
        public void SetSecondFile(SyncFile file)
        {
            if (!IsFirstFileSet)
            {
                throw new InvalidOperationException("Не установлен первый файл в синхропаре.");
            }

            if (file == null)
            {
                throw new ArgumentNullException("file", "Некорретный файл для синхропары");
            }

            if (Path.GetFileName(file.FullPath) != Path.GetFileName(_file1.FullPath))
            {
                throw new ArgumentException("Некорретный файл для синхропары. Имя или тип второго файла отличны от имени или типа первого файла.", "file");
            }

            _file2 = file;
        }
Exemple #6
0
        private static void SyncTransactionWithBackup(IFileSystemManager manager, SyncFile nonActualFile, SyncFile actualFile, string backupDirPath)
        {
            // в самом начале делаем бекап неактуального файла в директории с исполняемым файлом
            manager.CopyFile(nonActualFile.FullPath,
                String.Format("{3}\\{0}[{1:yyyy-MM-dd HH-mm-ss}]{2}",  //AppDomain.CurrentDomain.BaseDirectory +
                Path.GetFileNameWithoutExtension(nonActualFile.FullPath),
                SystemTime.Now(), Path.GetExtension(nonActualFile.FullPath), backupDirPath));

            SyncTransaction(manager, nonActualFile, actualFile);
        }
Exemple #7
0
        private static void SyncTransaction(IFileSystemManager manager, SyncFile nonActualFile, SyncFile actualFile)
        {
            // потом удаляем забекапленный неактуальный файл
            manager.DeleteFile(nonActualFile.FullPath);

            // и создаем новый файл как копию актуального на месте удаленного неактуального
            manager.CopyFile(actualFile.FullPath, nonActualFile.FullPath);
        }
Exemple #8
0
        /// <summary>
        /// Установка второго файла синхропары
        /// </summary>
        /// <param name="file">метаописание SyncFile</param>
        public void SetSecondFile(SyncFile file)
        {
            if (!IsFirstFileSet)
            {
                throw new InvalidOperationException("Не установлен первый файл в синхропаре.");
            }

            if (file == null)
            {
                throw new ArgumentNullException("file", "Некорретный файл для синхропары");
            }

            if (Path.GetFileName(file.FullPath) != Path.GetFileName(_file1.FullPath))
            {
                throw new ArgumentException("Некорретный файл для синхропары. Имя или тип второго файла отличны от имени или типа первого файла.", "file");
            }

            _file2 = file;
        }
Exemple #9
0
        /// <summary>
        /// Установка первого файла синхропары
        /// </summary>
        /// <param name="file">метаописание SyncFile</param>
        public void SetFirstFile(SyncFile file)
        {
            if(file == null)
                throw new ArgumentNullException();

            _file1 = file;
        }
Exemple #10
0
        public void InitializeTest()
        {
            // создаём тестовый набор данных:

            // иньекция системного времени:
            SystemTime.Now = () => _testDateTimeNow;

            // файл номер 1
            var file1Path = @"C:\some_folder\some_file1.csv"; // путь
            var file1Meta = new FileMetadata {ByteSize = 10, LastModified = new DateTime(2013, 1, 5)}; // свойства

            // файл номер 2, три файла(три пути) с одинаковыми свойствами
            var file2Path = @"D:\some_folder2\stuff\some_file1.csv";
            var file2WithDifferNamePath = @"D:\some_folder2\stuff\some_file1_with_differ_name.csv";
            var file2WithDifferExtensionPath = @"D:\some_folder2\stuff\some_file1.with_differ_extension";
            var file2Meta = new FileMetadata { ByteSize = 15, LastModified = new DateTime(2013, 1, 7) };

            // создаем тестовый менеджер файловой системы
            _injectedManager = A.Fake<IFileSystemManager>();
            // прописываем какие свойства (матаданные) он должен возвращать по каждому файлу
            A.CallTo(() => _injectedManager.GetFileMetadata(file1Path)).Returns(file1Meta);
            A.CallTo(() => _injectedManager.GetFileMetadata(file2Path)).Returns(file2Meta);
            A.CallTo(() => _injectedManager.GetFileMetadata(file2WithDifferNamePath)).Returns(file2Meta);
            A.CallTo(() => _injectedManager.GetFileMetadata(file2WithDifferExtensionPath)).Returns(file2Meta);

            #region делаем иньекцию тестового менеджера файловой системы:

            // создаем объекты SyncFile для файлов:
            // объект SyncFile для файла номер 1, неактуальный (более старый)
            _nonActualFile = new SyncFile(file1Path, _injectedManager);
            // объект SyncFile для файла номер 2, актуальный (более новый)
            _actualFile = new SyncFile(file2Path, _injectedManager);

            //  объект SyncFile для файла номер 2, актуальный (более новый) с другим именем
            _actualFileWithDifferName = new SyncFile(file2WithDifferNamePath, _injectedManager);
            //  объект SyncFile для файла номер 2, актуальный (более новый) с другим расширением
            _actualFileWithDifferExtension = new SyncFile(file2WithDifferExtensionPath, _injectedManager);

            _sfp = new SyncFilesPair(_injectedManager);
            #endregion
        }
Exemple #11
0
        static void Main(string[] args)
        {
            var syncPairs = new List<SyncFilesPair>();
            var backupDir = System.Environment.CurrentDirectory + "\\backup";
            FileSystemManager.Instance.CreateDirIfNotExist(backupDir);

            try
            {
                var xDoc = XDocument.Load(System.Environment.CurrentDirectory + "\\beaverSync.xml");
                var xPairs = xDoc.Root.Elements("SyncFilesPair");

                foreach (var xPair in xPairs)
                {
                    var pair = new SyncFilesPair {BackupDirPath = backupDir, NeedBackup = true};
                    var file1 = new SyncFile(xPair.Element("FirstFilePath").Value);
                    var file2 = new SyncFile(xPair.Element("SecondFilePath").Value);
                    pair.SetFirstFile(file1);
                    pair.SetSecondFile(file2);

                    syncPairs.Add(pair);
                }

            }
            catch (Exception exc)
            {
                Console.WriteLine("Неверный файл конфигурации. Невозможно считать синхропары.", exc);
            }

            int i = 1;
            foreach (var pair in syncPairs)
            {
                Console.WriteLine("|SyncPair #{0}", i++);
                Console.WriteLine("|");
                Console.WriteLine("|   1. {0}", pair.FirstFile.FullPath);
                Console.WriteLine("|\t {0}", pair.FirstFile.RetrieveFileMetadata());
                Console.WriteLine("|");
                Console.WriteLine("|   2. {0}", pair.SecondFile.FullPath);
                Console.WriteLine("|\t {0}", pair.SecondFile.RetrieveFileMetadata());
                Console.WriteLine();
            }

            //Console.WriteLine("Press <enter> for continue a synchronization process...");
            //Console.ReadKey();

            i = 1;
            foreach (var pair in syncPairs)
            {
                try
                {
                    Console.WriteLine("Try to synchronize a SyncPair #{0}...", i);
                    pair.Sync();
                    Console.WriteLine("SyncPair #{0} synchronized success.", i);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("SyncPair #{0} synchronization failed :(", i);
                    Console.WriteLine(ex);
                }

                Console.WriteLine();
                i++;
            }

            i = 1;
            foreach (var pair in syncPairs)
            {
                Console.WriteLine("|SyncPair #{0}", i++);
                Console.WriteLine("|");
                Console.WriteLine("|   1. {0}", pair.FirstFile.FullPath);
                Console.WriteLine("|\t {0}", pair.FirstFile.RetrieveFileMetadata());
                Console.WriteLine("|");
                Console.WriteLine("|   2. {0}", pair.SecondFile.FullPath);
                Console.WriteLine("|\t {0}", pair.SecondFile.RetrieveFileMetadata());
                Console.WriteLine();
            }

            Console.WriteLine("Press <enter> for exit...");
            Console.ReadKey();
        }