在前五篇文章當中,介紹了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將文件夾移動或重命名視作已刪除舊文件夾並且創建了新文件夾。報告該文件夾中的文件已移動。因此在這種情況下,通常無需重新發送文件數據。
上面介紹是的文件同步時所依據的“證明”(即憑什麼來解釋當前文件被修改,以及修改的地方在哪裡)