using CnasSynchrousModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace CNAS_SyncService { public class FileWatcherOperation { /// /// 所有的同步项 /// private List LstSyncInstrument { get; set; } /// /// 需要监控的同步项集合 /// public List LstWatcherItems { get; set; } /// /// 需要监控的数据源类型 /// private List lstWatchedataSourceType = new List { DataSourceType.Access, DataSourceType.Excel, DataSourceType.FoxPro, DataSourceType.SQLLite, DataSourceType.TXT }; /// /// 构造函数 /// public FileWatcherOperation(List LstSyncInstrument) { this.LstSyncInstrument = LstSyncInstrument; } /// /// 获取需要监控的同步项 /// public void GetFileWatcherItems() { LstWatcherItems=new List(); foreach (var item in LstSyncInstrument) { if (lstWatchedataSourceType.Contains(item.SyncInstrumentDSInfo.InstrumentDataSourceType)&&item.SyncInstrumentDSInfo.DsPathType == PathType.Local) { FileWatcherItem watcherItem = new FileWatcherItem() { SyncItemId = item.GUID, SyncPath = item.SyncInstrumentDSInfo.Path, SyncIfLocal = item.SyncInstrumentDSInfo.DsPathType == PathType.Local ? true : false, SyncIfChanged=false }; if (!LstWatcherItems.Contains(watcherItem)) LstWatcherItems.Add(watcherItem); } } } /// /// 启动文件/文件夹监控 /// public void StartFileWatcher() { foreach (var item in LstWatcherItems) { FileSystemWatcher watcher = new FileSystemWatcher(); var file = new FileInfo(item.SyncPath); watcher.Path = file.DirectoryName; //监视文件的文件夹所在目录 watcher.Filter = file.Name; //表示监视的是文件夹里面的哪个文件 //设置监视文件的哪些修改行为 watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite|NotifyFilters.FileName; watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.EnableRaisingEvents = true; } } /// /// 任何一个同步项的文件/文件夹发生变化/新增时触发该方法 /// /// /// private void OnChanged(object sender, FileSystemEventArgs e) { foreach (var item in LstWatcherItems) { if (e.FullPath == item.SyncPath) { item.SyncIfChanged = true; } } } } }