The examples in this topic focus on the following Sync Framework types:

Understanding File Synchronization

 

Sync Framework implements a synchronization provider that can be used to synchronize files and subfolders that are contained in a folder on a file system.

This provider exposes several configurable settings to give a finer degree of control over exactly how synchronization occurs and which items are synchronized.

To synchronize files between two folders, an application completes the following basic steps:

  1. Creates an FileSyncProvider object to represent each folder.

  2. Passes the two providers to an SyncOrchestrator object, and specifies one as the source provider and the other as the destination provider.

  3. Calls Synchronize to start the synchronization session.

For more information about synchronizing files, see Synchronizing Files.

Example

The example code in this section is from a console application that synchronizes two directories, including the subdirectories and files in those directories.

The example code shows the following tasks:

  • How to set synchronization options.

  • How to explicitly perform change detection for a replica复制品.

  • How to specify a filter that controls which items are included in synchronization.

  • How to handle conflicts that can occur during synchronization.

  • How to synchronize two replicas.

After showing these code examples, we include the complete code for the application so that you can build and run it.

Setting Synchronization Options

The FileSyncOptions object enables you to set several options for file synchronization, including how to detect changes and whether to delete items during synchronization or move them to the Recycle Bin.

The following code example sets four options, three of which are related to item deletes.

The option ExplicitDetectChanges means that Sync Framework will not perform change detection unless the application explicitly callsDetectChanges.

This is explained in the next section "Performing Change Detection".

Performing Change Detection

By default, Sync Framework performs change detection at both replicas whenever Synchronize is called.

Change detection enables Sync Framework to determine which items should be sent from the source to the destination and which items, if any, are in conflict.

By specifyingExplicitDetectChanges, you can control when change detection is performed.

The following code example calls change detection for each replica before Synchronize is ever called.

This example is meant to illustrate DetectChanges, but it does have the benefit of having one change detection pass rather than the two that would occur when we perform bidirectional synchronization later in the application.

Specifying a Static Filter

Static filters can be set to exclude files by name (including wildcard通配符 names) and by attribute属性.

Static filters can also be set to exclude the contents of whole subfolders.

Or, an explicit list of file names to include (including wildcard names) can be specified.

To be included in the scope, a file or a folder must pass all filters.

For example, if all files that have a .txt extension are excluded from the scope and MyFile.txt is specified in the list of files to explicitly include in the scope, MyFile.txt will be excluded because of its .txt extension.

The following code example uses the FileSyncScopeFilter object to create a filter that excludes all *.lnk files.

A filter has no relationship to its creating provider.

To connect a filter to a provider, pass the filter to one of the constructors for FileSyncProvider or by setting the ScopeFilterproperty.

In the sample application, we do this in the DetectChangesOnFileSystemReplica() method because the filter is relevant only for change detection.

Because the filter is independent of the provider, only one filter should be created per synchronization session;

providers should not use different filters, because this can lead to non-convergence of data.

In addition to static filters, you can also exclude files during synchronization by handling an event raised by the provider.

For more information, see Controlling Which Files Are Synchronized.

Handling Conflicts

Sync Framework detects and resolves决定 concurrency并发 conflicts and constraint约束 conflicts for files and folders.

A concurrency conflict occurs when the same item is changed at both replicas since the last synchronization session between those replicas.

A constraint conflict occurs if a file or folder with the same name is added to both replicas.

Conflicts are resolved by keeping the file or folder with the most recent change and deleting (or moving) the file or folder with the older change.

For files, you also have the option of specifying that the source or destination should win the conflict, regardless of which change occurred first.

The following code example registers event handlers for the ItemConflicting and ItemConstraintevents that are available through the SyncCallbacks object.

The methods that are called resolve all conflicts in favor of有利于 the source and write information to the console.

Synchronizing Two Replicas

After options and filters are set, the application synchronizes the two replicas by instantiating a SyncOrchestrator, and calling the Synchronizemethod.

The following code example specifies the provider for each replica, sets options, registers event handlers, specifies a synchronization direction of Upload, and calls Synchronize.

The method is called twice to perform bidirectional synchronization between the replicas.

Complete Code Example

The following code is the complete code for this example. The previous examples in this section were taken from this code.

To run this code:

  • Create a console application project, and add the code to the project.

  • Add references to Microsoft.Synchronzation.dll and Microsoft.Synchronzation.Files.dll.

  • Build the project to create an executable.

  • Run the executable from the command line to synchronize the files and subdirectories of two replica directories: MyExeName.exe \path\to\directoryA \path\to\directoryB.

In the Visual Basic example, the code explicitly sets the MTAThread attribute on the Main() method.

File synchronization provider requires applications to use the multithreaded apartment (MTA) threading model.

How to: Synchronize Files by Using Managed Code的更多相关文章

  1. Optimize Managed Code For Multi-Core Machines

    Parallel Performance Optimize Managed Code For Multi-Core Machines Daan Leijen and Judd Hall This ar ...

  2. Passing JavaScript Objects to Managed Code

    Silverlight If the target managed property or input parameter is strongly typed (that is, not typed ...

  3. 不要忽视Managed code stripping的副作用

    0x00 前言 Unity 2018.3之后,新的“Managed Stripping Level”选项将替换 player settings 中原有的“Stripping Level”选项. 这个新 ...

  4. C#中的文件同步

    How to: Synchronize Files by Using Managed Code FileSyncProvider Class File Synchronization Provider ...

  5. Oracle管理文件OMF (oracle managed files)

    简化dba的管理操作 1:启用 omf 23:16:04 SYS@orcl> show parameter DB_CREATE_FILE_DEST NAME TYPE VALUE ------- ...

  6. [转]Passing Managed Structures With Strings To Unmanaged Code Part 3

    1. Introduction. 1.1 In part 1 of this series of blogs we studied how to pass a managed structure (w ...

  7. [转]Passing Managed Structures With Strings To Unmanaged Code Part 2

    1. Introduction. 1.1 In part 1 of this series of blogs we studied how to pass a managed structure (w ...

  8. [转]Passing Managed Structures With Strings To Unmanaged Code Part 1

    1. Introduction. 1.1 Managed structures that contain strings are a common sight. The trouble is that ...

  9. Getting Started Synchronizing Files

    https://msdn.microsoft.com/en-US/library/bb902813(v=sql.110).aspx Sync Framework includes a file syn ...

随机推荐

  1. shell编程之数学运算

    shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...

  2. A*(A星)算法python实现

    在春节放假前两天我偶然看到了A\*算法(A\*算法是一个启发式的地图寻路算法),感觉挺有意思.正好放假前也没有什么事情,就花了一个下午写出算法的骨架,节后又花了半天时间完善屏幕输出的细节并且调试完成. ...

  3. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  4. KIP-32 Add timestamps to Kafka message

    通过KIP32,Kafka的每条消息都加进了时间戳,这个KIP在0.10.0.0被加入. 说到“时间”,先贴张图,娱乐一下(如果对星球大战系列电影不熟的话,请自动略过……) 这个KIP的文档在 KIP ...

  5. AESEncrypter加密算法代码示例

    package testJava.java; import java.security.SecureRandom; import java.util.Base64; import javax.cryp ...

  6. PHP JAVA Bridge桥的最新使用

    PHP JAVA Bridge桥的最新使用 在PHP和Java之间搭建一座桥梁,利用这座桥梁在这两个实体之间建立起一个沟通渠道,在这座桥梁的帮助下,你可以在Java中开发类,然后在PHP中调用它们的方 ...

  7. 为什么主流网站无法捕获 XSS 漏洞?

    二十多年来,跨站脚本(简称 XSS)漏洞一直是主流网站的心头之痛.为什么过了这么久,这些网站还是对此类漏洞束手无策呢? 对于最近 eBay 网站曝出的跨站脚本漏洞,你有什么想法?为什么会出现这样的漏网 ...

  8. POJ 1759

    Garland Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1236   Accepted: 547 Descriptio ...

  9. IOS第三方地图-百度地图集成

    百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 照上面吧百度地图sdk集成到工程 然后在pilst文件中加入: 如果地图没有 ...

  10. URAL 1167. Bicolored Horses (DP)

    题目链接 题意 :农夫每天都会放马出去,然后晚上把马赶入马厩,于是让马排成一行入马厩,但是不想马走更多的路,所以让前p1匹入第一个马厩,p2匹马入第二个马厩…………但是他不想让他的任何一个马厩空着,所 ...