使用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和内存占用过高的问题.

posted @ 2012-09-03 11:13  xu.c  阅读(3035)  评论(1编辑  收藏  举报