private static void SyncTransaction(IFileSystemManager manager, SyncFile nonActualFile, SyncFile actualFile) { // потом удаляем забекапленный неактуальный файл manager.DeleteFile(nonActualFile.FullPath); // и создаем новый файл как копию актуального на месте удаленного неактуального manager.CopyFile(actualFile.FullPath, nonActualFile.FullPath); }
/// <summary> /// Установка первого файла синхропары /// </summary> /// <param name="file">метаописание SyncFile</param> public void SetFirstFile(SyncFile file) { if (file == null) { throw new ArgumentNullException(); } _file1 = file; }
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); }
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); }
/// <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; }
/// <summary> /// Установка первого файла синхропары /// </summary> /// <param name="file">метаописание SyncFile</param> public void SetFirstFile(SyncFile file) { if(file == null) throw new ArgumentNullException(); _file1 = file; }
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 }
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(); }