在前五篇文章当中,介绍了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将文件夹移动或重命名视作已删除旧文件夹并且创建了新文件夹。报告该文件夹中的文件已移动。因此在这种情况下,通常无需重新发送文件数据。
上面介绍是的文件同步时所依据的“证明”(即凭什么来解释当前文件被修改,以及修改的地方在哪里)