微软同步框架(MSF)入门之六--文件(夹)同步

在前五篇文章当中,介绍了Sync For ADO.NET Service,从这篇文章开始,将开始介绍有关使用MSF进行文件(夹)同步的相关知识。因为文件同步的应用目前比较广泛,所以可能够要用3-4篇文章来进行介绍。今天先介绍一下有关MSF文件同步的原理和使用MSF中现有的类来实现一个简单的DEMO(本DEMO支持文件和文件夹)同步。

好的,下面开始今天的正文。

SyncServices可帮助应用程序在NTFS、FAT或SMB文件系统中同步文件、文件夹和子文件夹。要同步的目录可为本地或远程目录,且不必同属一个文件系统。应用程序可以使用静态筛选器通过显式列出文件或使用通配符(如*.txt)来排除或包括这些文件;或者应用程序可以设置筛选器来排除整个子文件夹。应用程序还可以注册以接收文件同步进度的通知。

首先,我们需要了解一下MSF进行同步的原理。换句话说就是其进行文件同步的底层实现机制是什么?

按MSF的SDK中所说明的(内置变更检测算法,用于检测针对同步作用域中的文件和文件夹所做的变更):

MSF文件同步服务会对以下属性发生变更后进行所谓的"报告变更":

1.最后一次修改文件的时间。

2.如果启用哈希运算,则是为该文件计算的哈希值。(关于计算变更检测的哈希值:如果应用程序在初始化提供程序时指定了CompareFileStreams标志(对于托管代码)或FILESYNC_INIT_FLAG_USE_HASHING标志(对于非托管代码),该提供程序将使用文件流的所有内容计算每个文件的哈希值。然后,该提供程序会比较这些哈希值;这样做可以更准确地执行变更检测,但性能会稍有降低。在本DEMO中将不会使用该设置项)

3.文件大小。

4.文件或文件夹名称。此检查区分大小写。

5.由提供程序处理的任意文件属性。

如果发现文件与此前了解的文件具有相同的创建时间、大小和哈希值(如果使用了哈希运算),但是文件的名称或路径不同,则报告文件移动或重命名。如果发现多个文件符合这些条件,SyncServices将认为原始文件已删除并且创建了新文件。

SyncServices将文件夹移动或重命名视作已删除旧文件夹并且创建了新文件夹。报告该文件夹中的文件已移动。因此在这种情况下,通常无需重新发送文件数据。

上面介绍是的文件同步时所依据的“证明”(即凭什么来解释当前文件被修改,以及修改的地方在哪里)

时间: 2025-01-01 20:40:44

微软同步框架(MSF)入门之六--文件(夹)同步的相关文章

微软同步框架(MSF)入门之五--使用WCF同步远程数据

在之前介绍的两个DEMO中,链接远程服务器所使用的方式都是通过数据库链接串.虽然可以简单的实现所期望的数据同步功能,但这样做有两个问题: 1.不适合进行分布式布署. 2.安全方面存在问题,因为在客户端会持有远程数据库服务器的链接帐号. 因为这两个问题,导致了今天所要说的内容.当然在MSF中是支持采用WCF方式来进行远程数据访问的,而且WCF不仅可以用于数据同步,还可以进行文件同步(会在后续章节中进行介绍). 好了,费话少说,开始今天的正文吧. 下面简要介绍一下今天DEMO的一个具体开发流程. 首

微软同步框架(MSF)入门之八--使用WCF同步远程元数据(二)

到这里服务端的代码就全部列举出来了.当然本文中介绍的是元数据同步,而相应的SyncProvider实现是通过MySimpleSyncProvider.cs文件提供的,当然为了不让我的某些错误理解影响大家阅读源码,这里直接将相应的英文注释也放在这里. public class MySyncProvider : KnowledgeSyncProvider, IChangeDataRetriever, INotifyingChangeApplierTarget { // The name of the

微软同步框架(MSF)入门之八--使用WCF同步远程元数据(一)

在MSF中,提供了用于存取维护元数据的一些相应工具类,即Metadata Storage Service.它可帮助存储提供程序的同步元数据,该提供程序表示无法通过其他方式存储元数据的副本.Metadata Storage Service 使用占用较小内存和磁盘空间的轻型数据库,可以随提供程序重新分发,并且安全可靠. 其所提供的API 将元数据存储区与用于访问元数据存储区的接口和方法明确区分开,这样即可实现备用存储区,且对提供程序稍作变更即可使用备用存储区. 当然上面是SDK中的一些说法:) Me

微软同步框架(MSF)入门之三--分析生成的同步类文件

在前两篇文章当中,我介绍了SnapShot(快照方式)和"只同步新更改和增量更改"这两种同步方式.将使用设计器同步向导生成了两个相应的DEMO.今天我们会一起分析一下这两个DEMO中相应的同步文件内容和相互差异. 首先要分析的DEMO是"只同步新更改和增量更改",我们用VS2008打开DEMO的解决方案方案,如下图: 之前所说的关于MSF为我们生成的主要的类代码就保存在了BiDirectSyncData.sync文件中,下面先分析一下BiDirectSyncData

微软同步框架(MSF)入门开篇(附SnapShot快照Demo)

在Teched2008上听了一节关于MSF(Microsoft Sync Framework 微软同步框架),这一框架允许开发者创建离线式的应用.设备和服务,可以与任何应用的任意类型数据进行集成. 有关这个模架的介绍在网上有一些链接,而园子里也有朋友做过这方面的介绍.当时东西好不好,只有用过才会知道.今天这篇文章就是简单试用一把MSF来开发ADO.NET同步的DEMO(当然其也支持文件和文件夹的同步,我会在以后写文介绍研究心得).因为是初次使用,所以截图多了一些,当然在概念理解上也可能有偏差,有

微软同步框架(MSF)入门之四--冲突(Conflict)检测和处理

在几篇文章当中,我介绍了 SnapShot(快照方式)和"只同步新更改和增量更改"这两种同步方式并对相应的生成文件进行了粗略的分析.今天开始把话题深入一下,聊一聊MSF的冲突检测和处理. 这里所说的冲突(Conflict) 主要是指当客户端与服务端数据在进行CUD时,所操作的数据同步期间发生了错误,如通常所说的约束冲突(主键重复),以及在同步时多个节点(客户端)上更改了同一行,或服务端删除该行而其它节点却更新了该行便存在冲突等.当然在设计应用程序时应避免产生冲突(比如可通过筛选行和列等

微软同步框架(MSF)入门之七--定制同步提供程序(SyncProvider)

在上一篇文章当中,简要介绍了一下如何使用现有的 SyncProvider 对象来进行文件(夹)同步.今天的这个DEMO主要演示通过继承方式来实现自己的SyncProvider来进行相关同步元数据存储,当然这样做会给我们以额外的好处,比如按自己的意愿来创建.版本和删除项的信息等.另外就是对同步应用程序的工作原理也会有一个大概的认识. 在开始正文之前,我在网上看到了这篇文章对MSF的负责报道,当然它所说的部分观点我同意.MSF的确不那么好学,官方的文档的确也难懂,但事情总要慢慢来,只有通过不断积累不

微软同步框架(MSF)入门之二--增量和修改同步方式

在上一篇文章当中,我通过创建一个SnapShot(快照方式)DEMO演示MSF是如何将远程数据服务器中的数据同步到本地 SQLCE数据库中的.今天这篇文章演示如何使用同步操作向导创建另外一种方式,即"只同步新更改和增量更改"方式.当前这种方式比之前一种"快照方式"要更加便捷,而且因为快照方式是采用整表同步,因此不管是数据是否被修改过,都是把所有数据下载到本地,而今天演示的这种方式是只同步修改或新添加的数据,可以说是一种经济实惠的解决方案. 当然,这里并不是说&quo

php Laravel 框架之建立后台文件夹 二

在前面的章节中我们讲解过如何在 Laravel框架中建立后台文件夹. php Laravel 框架之建立后台文件夹 现在我们再添加一块内容.是关于自动加载的部分. 在我们app目录中还有个start目录.它里面这样写道: In addition to using Composer, you may use the Laravel class loader to load your controllers and models. This is useful for keeping all of