CNAS取数仪器端升级
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

FileWatcherOperation.cs 3.5KB

4ヶ月前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using CnasSynchrousModel;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. namespace CNAS_SyncService
  8. {
  9. public class FileWatcherOperation
  10. {
  11. /// <summary>
  12. /// 所有的同步项
  13. /// </summary>
  14. private List<SyncInstrumentItemInfo> LstSyncInstrument { get; set; }
  15. /// <summary>
  16. /// 需要监控的同步项集合
  17. /// </summary>
  18. public List<FileWatcherItem> LstWatcherItems { get; set; }
  19. /// <summary>
  20. /// 需要监控的数据源类型
  21. /// </summary>
  22. private List<DataSourceType> lstWatchedataSourceType = new List<DataSourceType> {
  23. DataSourceType.Access,
  24. DataSourceType.Excel,
  25. DataSourceType.FoxPro,
  26. DataSourceType.SQLLite,
  27. DataSourceType.TXT
  28. };
  29. /// <summary>
  30. /// 构造函数
  31. /// </summary>
  32. public FileWatcherOperation(List<SyncInstrumentItemInfo> LstSyncInstrument)
  33. {
  34. this.LstSyncInstrument = LstSyncInstrument;
  35. }
  36. /// <summary>
  37. /// 获取需要监控的同步项
  38. /// </summary>
  39. public void GetFileWatcherItems()
  40. {
  41. LstWatcherItems=new List<FileWatcherItem>();
  42. foreach (var item in LstSyncInstrument)
  43. {
  44. if (lstWatchedataSourceType.Contains(item.SyncInstrumentDSInfo.InstrumentDataSourceType)&&item.SyncInstrumentDSInfo.DsPathType == PathType.Local)
  45. {
  46. FileWatcherItem watcherItem = new FileWatcherItem() {
  47. SyncItemId = item.GUID,
  48. SyncPath = item.SyncInstrumentDSInfo.Path,
  49. SyncIfLocal = item.SyncInstrumentDSInfo.DsPathType == PathType.Local ? true : false,
  50. SyncIfChanged=false
  51. };
  52. if (!LstWatcherItems.Contains(watcherItem))
  53. LstWatcherItems.Add(watcherItem);
  54. }
  55. }
  56. }
  57. /// <summary>
  58. /// 启动文件/文件夹监控
  59. /// </summary>
  60. public void StartFileWatcher()
  61. {
  62. foreach (var item in LstWatcherItems)
  63. {
  64. FileSystemWatcher watcher = new FileSystemWatcher();
  65. var file = new FileInfo(item.SyncPath);
  66. watcher.Path = file.DirectoryName; //监视文件的文件夹所在目录
  67. watcher.Filter = file.Name; //表示监视的是文件夹里面的哪个文件
  68. //设置监视文件的哪些修改行为
  69. watcher.NotifyFilter = NotifyFilters.LastAccess
  70. | NotifyFilters.LastWrite|NotifyFilters.FileName;
  71. watcher.Changed += new FileSystemEventHandler(OnChanged);
  72. watcher.Created += new FileSystemEventHandler(OnChanged);
  73. watcher.EnableRaisingEvents = true;
  74. }
  75. }
  76. /// <summary>
  77. /// 任何一个同步项的文件/文件夹发生变化/新增时触发该方法
  78. /// </summary>
  79. /// <param name="sender"></param>
  80. /// <param name="e"></param>
  81. private void OnChanged(object sender, FileSystemEventArgs e)
  82. {
  83. foreach (var item in LstWatcherItems)
  84. {
  85. if (e.FullPath == item.SyncPath)
  86. {
  87. item.SyncIfChanged = true;
  88. }
  89. }
  90. }
  91. }
  92. }