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;
}
}
}
}
}