|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using CnasSynchrousModel;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
-
- namespace CNAS_SyncService
- {
- public class FileWatcherOperation
- {
- /// <summary>
- /// 所有的同步项
- /// </summary>
- private List<SyncInstrumentItemInfo> LstSyncInstrument { get; set; }
-
- /// <summary>
- /// 需要监控的同步项集合
- /// </summary>
- public List<FileWatcherItem> LstWatcherItems { get; set; }
-
- /// <summary>
- /// 需要监控的数据源类型
- /// </summary>
- private List<DataSourceType> lstWatchedataSourceType = new List<DataSourceType> {
- DataSourceType.Access,
- DataSourceType.Excel,
- DataSourceType.FoxPro,
- DataSourceType.SQLLite,
- DataSourceType.TXT
- };
-
- /// <summary>
- /// 构造函数
- /// </summary>
- public FileWatcherOperation(List<SyncInstrumentItemInfo> LstSyncInstrument)
- {
- this.LstSyncInstrument = LstSyncInstrument;
- }
-
- /// <summary>
- /// 获取需要监控的同步项
- /// </summary>
- public void GetFileWatcherItems()
- {
- LstWatcherItems=new List<FileWatcherItem>();
-
- 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);
- }
- }
- }
-
- /// <summary>
- /// 启动文件/文件夹监控
- /// </summary>
- 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;
- }
- }
-
- /// <summary>
- /// 任何一个同步项的文件/文件夹发生变化/新增时触发该方法
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void OnChanged(object sender, FileSystemEventArgs e)
- {
- foreach (var item in LstWatcherItems)
- {
- if (e.FullPath == item.SyncPath)
- {
- item.SyncIfChanged = true;
- }
- }
- }
- }
- }
|