ПКРПСиБД LAB10 Захаров А.Е. (548562), страница 2
Текст из файла (страница 2)
class Program
{
public static void Main(string[] args)
{
if (args.Length < 2 ||
string.IsNullOrEmpty(args[0]) || string.IsNullOrEmpty(args[1]) ||
!Directory.Exists(args[0]) || !Directory.Exists(args[1]))
{
Console.WriteLine("Использование: SyncFolders.exe [папка 1] [папка 2]");
return;
}
string root1 = args[0];
string root2 = args[1];
try
{
// Установка опций синхронизации
FileSyncOptions options =
FileSyncOptions.ExplicitDetectChanges // Явное отслеживание изменений
| FileSyncOptions.RecycleDeletedFiles // Удалять файлы в корзину
| FileSyncOptions.RecyclePreviousFileOnUpdates
| FileSyncOptions.RecycleConflictLoserFiles;
// Создание фильтра для файлов *.lnk
FileSyncScopeFilter filter = new FileSyncScopeFilter();
filter.FileNameExcludes.Add("*.lnk");
// Запуск выявления изменений в директориях
DetectChangesOnFileSystemReplica(root1, filter, options);
DetectChangesOnFileSystemReplica(root2, filter, options);
// Синхронизация директорий
SyncFileSystemReplicasOneWay(root1, root2, null, options);
SyncFileSystemReplicasOneWay(root2, root1, null, options);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
// Выявление изменений в директории с учётом фильтра
public static void DetectChangesOnFileSystemReplica(string replicaRootPath,
FileSyncScopeFilter filter, FileSyncOptions options)
{
FileSyncProvider provider = null;
try
{
provider = new FileSyncProvider(replicaRootPath, filter, options);
provider.DetectChanges();
}
finally
{
// Освобождение ресурсов
if (provider != null)
provider.Dispose();
}
}
// Одностороння синхронизация дирректорий
public static void SyncFileSystemReplicasOneWay(
string sourceReplicaRootPath, string destinationReplicaRootPath,
FileSyncScopeFilter filter, FileSyncOptions options)
{
FileSyncProvider sourceProvider = null;
FileSyncProvider destinationProvider = null;
try
{
sourceProvider = new FileSyncProvider(sourceReplicaRootPath, filter, options);
destinationProvider = new FileSyncProvider(destinationReplicaRootPath, filter, options);
// Регистрация событий для отслеживания принятых и проигнорированных изменений
destinationProvider.AppliedChange +=
new EventHandler
destinationProvider.SkippedChange +=
new EventHandler
// Загружаем изменения из папки-источника в папку назначения
SyncOrchestrator agent = new SyncOrchestrator();
agent.LocalProvider = sourceProvider;
agent.RemoteProvider = destinationProvider;
agent.Direction = SyncDirectionOrder.Upload;
Console.WriteLine("Синхронизация изменений: " +
destinationProvider.RootDirectoryPath);
agent.Synchronize();
}
finally
{
// Освобождение ресурсов
if (sourceProvider != null) sourceProvider.Dispose();
if (destinationProvider != null) destinationProvider.Dispose();
}
}
public static void OnAppliedChange(object sender, AppliedChangeEventArgs args)
{
switch (args.ChangeType)
{
case ChangeType.Create:
Console.WriteLine("CREATE " + args.NewFilePath);
break;
case ChangeType.Delete:
Console.WriteLine("DELETE " + args.OldFilePath);
break;
case ChangeType.Update:
Console.WriteLine("OVERWRITE " + args.OldFilePath);
break;
case ChangeType.Rename:
Console.WriteLine("RENAME " + args.OldFilePath + " => " + args.NewFilePath);
break;
}
}
public static void OnSkippedChange(object sender, SkippedChangeEventArgs args)
{
Console.WriteLine("SKIPPED " + args.ChangeType.ToString().ToUpper()
+ " " + (!string.IsNullOrEmpty(args.CurrentFilePath) ? args.CurrentFilePath : args.NewFilePath));
if (args.Exception != null)
Console.WriteLine(" [" + args.Exception.Message + "]");
}
}
}
Литература
-
Синхронизация SQL Server и SQL Express.
http://msdn.microsoft.com/ru-ru/library/ff928700.aspx -
Синхронизация файлов с помощью управляемого кода
http://msdn.microsoft.com/ru-ru/library/ee617386.aspx -
Pro Sync Framework. Rituraj Singh, Joydip Kanjilal
http://books.google.ru/books?id=g2A6FiSXpHkC
Москва, 2012