使用Microsoft Sync Framework做文件同步


閑來無事整理電腦時候發現電腦程序菜單里面有個Microsoft Sync Framework,看到名字也知道是異步框架。但使用場景就不太清楚了。后面查閱了相關資料,知道比較典型的使用就是做文件同步了。

結果第二天就在公司遇到比較坑爹的客戶需求,需要將一個網站的數據共享,而且數據量比較大,其中產品的圖片就成了一個大問題了。如果修改程序會提高維護成功,而且不可能為一個客戶去修改程序,所以只能考慮文件復制過去,添加產品上傳圖片后也要自動同步過去,最初考慮使用SecondCopy 但是要配置的數量太多,所以絕對用Microsoft Sync 去實現.同時對文件夾進行監控,如果有改變就啟動同步。

 

static void Main(string[] args)
        {
            //存放需要同步的文件夾,以后其他場景臨時使用一下. 格式   <item from="G:\uploads\387364" to=" G:\uploads\387361" />
            XElement doc = XElement.Load("File.config");
            var itms = doc.Descendants("item");

            foreach (var item in itms)
            {
                var from = item.Attribute("from").Value;
                var to = item.Attribute("to").Value;
                if (!string.IsNullOrEmpty(from) && !string.IsNullOrEmpty(to) && Directory.Exists(from))
                {
                    if (!Directory.Exists(to))
                    {
                        Directory.CreateDirectory(to);
                    }
                    //來源文件夾
                    FileSyncProvider sourceProvider = new FileSyncProvider(Guid.NewGuid(), from);
                    //目錄文件夾
                    FileSyncProvider destProvider = new FileSyncProvider(Guid.NewGuid(), to);
                    

                    SyncOrchestrator syncAgent = new SyncOrchestrator();
                    syncAgent.LocalProvider = sourceProvider;
                    syncAgent.RemoteProvider = destProvider;
                    syncAgent.Synchronize();
                    Console.WriteLine(from + " 到 " + to + " 同步完成");
                    

                    //文件夾監控
                    FileSystemWatcher watcher = new FileSystemWatcher(from, "*.jpg");
                    watcher.Changed += (O, E) =>
                    {
                        Console.WriteLine(E.ChangeType);
                        //啟動同步回話
                        syncAgent.Synchronize();
                        Console.WriteLine(from + " 到 " + to + " 同步完成");
                    };
                    watcher.EnableRaisingEvents = true;
                }
            }


            Console.ReadLine();
        }

  

在服務器上使用時候,還是比較穩定,在2萬多圖片的文件夾下使用,沒有出現cpu和內存占用過高的問題.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM