青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++分析研究  
C++
日歷
<2013年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
統計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
  本文主要描述如何通過C#實現實時監控文件目錄下的變化,包括文件和目錄的添加,刪除,修改和重命名等操作。
 
   首先,我們需要對。net提供的FileSystemWatcher類有所了解。我有些懶,找了MSDN對該類的描述。
 
   FileSystemWatcher類偵聽文件系統更改通知,并在目錄或目錄中的文件發生更改時引發事件。
 
   使用 FileSystemWatcher 監視指定目錄中的更改。可監視指定目錄中的文件或子目錄的更改。可以創建一個組件來監視本地計算機、網絡驅動器或遠程計算機上的文件。
 
   若要監視所有文件中的更改,請將 Filter 屬性設置為空字符串 ("") 或使用通配符("*.*")。若要監視特定的文件,請將 Filter 屬性設置為該文件名。例如,若要監視文件 MyDoc.txt 中的更改,請將 Filter 屬性設置為"MyDoc.txt".也可以監視特定類型文件中的更改。例如,若要監視文本文件中的更改,請將 Filter 屬性設置為"*.txt". www.yz-jx.com 
 
   可監視目錄或文件中的若干種更改。例如,可監視文件或目錄的 Attributes、LastWrite 日期和時間或 Size 方面的更改。通過將 NotifyFilter 屬性設置為 NotifyFilters 值之一來達到此目的。有關可監視的更改類型的更多信息,請參見 NotifyFilters. www.lefeng123.com
 
   可監視文件或目錄的重命名、刪除或創建。例如,若要監視文本文件的重命名,請將 Filter 屬性設置為"*.txt",并使用為其參數指定的 Renamed 來調用 WaitForChanged 方法。
 
   Windows 操作系統在 FileSystemWatcher 創建的緩沖區中通知組件文件發生更改。如果短時間內有很多更改,則緩沖區可能會溢出。這將導致組件失去對目錄更改的跟蹤,并且它將只提供一般性通知。使用 InternalBufferSize 屬性來增加緩沖區大小的開銷較大,因為它來自無法換出到磁盤的非頁面內存,所以應確保緩沖區大小適中(盡量小,但也要有足夠大小以便不會丟失任何文件更改事件)。若要避免緩沖區溢出,請使用 NotifyFilter 和 IncludeSubdirectories 屬性,以便可以篩選掉不想要的更改通知 www.yztrans.com
 
   使用 FileSystemWatcher 類時,請注意以下事項。
 
   1) 對包括隱藏文件(夾)在內的所有文件(夾)進行監控。
 
   2) 您可以為 InternalBufferSize 屬性(用于監視網絡上的目錄)設置的最大大小為 64 KB.
 
   FileSystemWatcher的實例監控到文件(夾)的變化后,會觸發相應的事件,其中文件(夾)的添加,刪除和修改會分別觸發Created,Deleted,Changed事件,文件(夾)重命名時觸發OnRenamed事件。
 
   然后,在熟悉了FileSystemWatcher類后,我們開始自己的程序編寫。
 
   實例化FileSystemWatcher類,并傳入需要監控的目錄路徑,以及是否制定監控的文件類型(文章前面有所介紹)。
 
   _watcher = new FileSystemWatcher(_path, _filter);
 
   注冊監聽事件,以及編寫事件觸發后相關的處理邏輯。
 
   _watcher.Created += new FileSystemEventHandler(OnChanged);
 
   _watcher.Changed += new FileSystemEventHandler(OnChanged);
 
   _watcher.Deleted += new FileSystemEventHandler(OnChanged);
 
   _watcher.Renamed += new RenamedEventHandler(OnRenamed);
 
   _watcher.IncludeSubdirectories = true;
 
   _watcher.EnableRaisingEvents = true;
 
   在本程序中,專門定義了一個FileChangeInformation類來記錄文件變化信息,并定義了一個CustomQueue類,該類類似于Queue類,是一個數據先進先出的集合,用來存儲所有的文件變化消息,并提供數據持久化功能。
 
   監控類 - FileWatcher,代碼如下:
 
   復制代碼
 
   1 /// <summary>
 
   2 /// 文件監控類,用于監控指定目錄下文件以及文件夾的變化
 
   3 /// </summary>
 
   4 public class FileWatcher
 
   5 {
 
   6 private FileSystemWatcher _watcher = null;
 
   7 private string _path = string.Empty;
 
   8 private string _filter = string.Empty;
 
   9 private bool _isWatch = false;
 
   10 private CustomQueue<FileChangeInformation> _queue = null;
 
   11
 
   12 /// <summary>
 
   13 /// 監控是否正在運行
 
   14 /// </summary>
 
   15 public bool IsWatch
 
   16 {
 
   17 get
 
   18 {
 
   19 return _isWatch;
 
   20 }
 
   21 }
 
   22
 
   23 /// <summary>
 
   24 /// 文件變更信息隊列
 
   25 /// </summary>
 
   26 public CustomQueue<FileChangeInformation> FileChangeQueue
 
   27 {
 
   28 get
 
   29 {
 
   30 return _queue;
 
   31 }
 
   32 }
 
   33
 
   34 /// <summary>
 
   35 /// 初始化FileWatcher類
 
   36 /// </summary>
 
   37 /// <param name="path">監控路徑</param>
 
   38 public FileWatcher(string path)
 
   39 {
 
   40 _path = path;
 
   41 _queue = new CustomQueue<FileChangeInformation>();
 
   42 }
 
   43 /// <summary>
 
   44 /// 初始化FileWatcher類,并指定是否持久化文件變更消息
 
   45 /// </summary>
 
   46 /// <param name="path">監控路徑</param>
 
   47 /// <param name="isPersistence">是否持久化變更消息</param>
 
   48 /// <param name="persistenceFilePath">持久化保存路徑</param>
 
   49 public FileWatcher(string path, bool isPersistence, string persistenceFilePath)
 
   50 {
 
   51 _path = path;
 
   52 _queue = new CustomQueue<FileChangeInformation>(isPersistence, persistenceFilePath);
 
   53 }
 
   54
 
   55 /// <summary>
 
   56 /// 初始化FileWatcher類,并指定是否監控指定類型文件
 
   57 /// </summary>
 
   58 /// <param name="path">監控路徑</param>
 
   59 /// <param name="filter">指定類型文件,格式如:*.txt,*.doc,*.rar</param>
 
   60 public FileWatcher(string path, string filter)
 
   61 {
 
   62 _path = path;
 
   63 _filter = filter;
 
   64 _queue = new CustomQueue<FileChangeInformation>();
 
   65 }
 
   66
 
   67 /// <summary>
 
   68 /// 初始化FileWatcher類,并指定是否監控指定類型文件,是否持久化文件變更消息
 
   69 /// </summary>
 
   70 /// <param name="path">監控路徑</param>
 
   71 /// <param name="filter">指定類型文件,格式如:*.txt,*.doc,*.rar</param>
 
   72 /// <param name="isPersistence">是否持久化變更消息</param>
 
   73 /// <param name="persistenceFilePath">持久化保存路徑</param>
 
   74 public FileWatcher(string path, string filter, bool isPersistence, string persistenceFilePath)
 
   75 {
 
   76 _path = path;
 
   77 _filter = filter;
 
   78 _queue = new CustomQueue<FileChangeInformation>(isPersistence, persistenceFilePath);
 
   79 }
 
   80
 
   81 /// <summary>
 
   82 /// 打開文件監聽器
 
   83 /// </summary>
 
   84 public void Open()
 
   85 {
 
   86 if (!Directory.Exists(_path))
 
   87 {
 
   88 Directory.CreateDirectory(_path);
 
   89 }
 
   90
 
   91 if (string.IsNullOrEmpty(_filter))
 
   92 {
 
   93 _watcher = new FileSystemWatcher(_path);
 
   94 }
 
   95 else
 
   96 {
 
   97 _watcher = new FileSystemWatcher(_path, _filter);
 
   98 }
 
   99 //注冊監聽事件
 
   100 _watcher.Created += new FileSystemEventHandler(OnProcess);
 
   101 _watcher.Changed += new FileSystemEventHandler(OnProcess);
 
   102 _watcher.Deleted += new FileSystemEventHandler(OnProcess);
 
   103 _watcher.Renamed += new RenamedEventHandler(OnFileRenamed);
 
   104 _watcher.IncludeSubdirectories = true;
 
   105 _watcher.EnableRaisingEvents = true;
 
   106 _isWatch = true;
 
   107 }
 
   108
 
   109 /// <summary>
 
   110 /// 關閉監聽器
 
   111 /// </summary>
 
   112 public void Close()
 
   113 {
 
   114 _isWatch = false;
 
   115 _watcher.Created -= new FileSystemEventHandler(OnProcess);
 
   116 _watcher.Changed -= new FileSystemEventHandler(OnProcess);
 
   117 _watcher.Deleted -= new FileSystemEventHandler(OnProcess);
 
   118 _watcher.Renamed -= new RenamedEventHandler(OnFileRenamed);
 
   119 _watcher.EnableRaisingEvents = false;
 
   120 _watcher = null;
 
   121 }
 
   122
 
   123 /// <summary>
 
   124 /// 獲取一條文件變更消息
 
   125 /// </summary>
 
   126 /// <returns></returns>
 
   127 public FileChangeInformation Get()
 
   128 {
 
   129 FileChangeInformation info = null;
 
   130 if (_queue.Count > 0)
 
   131 {
 
   132 lock (_queue)
 
   133 {
 
   134 info = _queue.Dequeue();
 
   135 }
 
   136 }
 
   137 return info;
 
   138 }
 
   139
 
   140 /// <summary>
 
   141 /// 監聽事件觸發的方法
 
   142 /// </summary>
 
   143 /// <param name="sender"></param>
 
   144 /// <param name="e"></param>
 
   145 private void OnProcess(object sender, FileSystemEventArgs e)
 
   146 {
 
   147 try
 
   148 {
 
   149 FileChangeType changeType = FileChangeType.Unknow;
 
   150 if (e.ChangeType == WatcherChangeTypes.Created)
 
   151 {
 
   152 if (File.GetAttributes(e.FullPath) == FileAttributes.Directory)
 
   153 {
 
   154 changeType = FileChangeType.NewFolder;
 
   155 }
 
   156 else
 
   157 {
 
   158 changeType = FileChangeType.NewFile;
 
   159 }
 
   160 }
 
   161 else if (e.ChangeType == WatcherChangeTypes.Changed)
 
   162 {
 
   163 //部分文件創建時同樣觸發文件變化事件,此時記錄變化操作沒有意義
 
   164 //如果
 
   165 if (_queue.SelectAll(
 
   166 delegate(FileChangeInformation fcm)
 
   167 {
 
   168 return fcm.NewPath == e.FullPath && fcm.ChangeType == FileChangeType.Change;
 
   169 })。Count<FileChangeInformation>() > 0)
 
   170 {
 
   171 return;
 
   172 }
 
   173
 
   174 //文件夾的變化,只針對創建,重命名和刪除動作,修改不做任何操作。
 
   175 //因為文件夾下任何變化同樣會觸發文件的修改操作,沒有任何意義。
 
   176 if (File.GetAttributes(e.FullPath) == FileAttributes.Directory)
 
   177 {
 
   178 return;
 
   179 }
 
   180
 
   181 changeType = FileChangeType.Change;
 
   182 }
 
   183 else if (e.ChangeType == WatcherChangeTypes.Deleted)
 
   184 {
 
   185 changeType = FileChangeType.Delete;
 
   186 }
 
   187
 
   188 //創建消息,并壓入隊列中
 
   189 FileChangeInformation info = new FileChangeInformation(Guid.NewGuid()。ToString(), changeType, e.FullPath, e.FullPath, e.Name, e.Name);
 
   190 _queue.Enqueue(info);
 
   191 }
 
   192 catch
 
   193 {
 
   194 Close();
 
   195 }
 
   196 }
 
   197
 
   198 /// <summary>
 
   199 /// 文件或目錄重命名時觸發的事件
 
   200 /// </summary>
 
   201 /// <param name="sender"></param>
 
   202 /// <param name="e"></param>
 
   203 private void OnFileRenamed(object sender, RenamedEventArgs e)
 
   204 {
 
   205 try
 
   206 {
 
   207 //創建消息,并壓入隊列中
 
   208 FileChangeInformation info = new FileChangeInformation(Guid.NewGuid()。ToString(), FileChangeType.Rename, e.OldFullPath, e.FullPath, e.OldName, e.Name);
 
   209 _queue.Enqueue(info);
 
   210 }
 
   211 catch
 
   212 {
 
   213 Close();
 
   214 }
 
   215 }
 
   216 }
 
   復制代碼
 
   最后,功能調用如下:
 
   復制代碼
 
   1 //初始化監控器
 
   2 FileWatcher watcher = new FileWatcher(@"D:\");
 
   3 watcher.Open();
 
   4
 
   5 FileChangeInformation fci = null;
 
   6 //獲取消息
 
   7 while (true)
 
   8 {
 
   9 //如果IsWatch為False,則可能監控內部發生異常終止了監控,需要重新開啟監控
 
   10 if (watcher.IsWatch)
 
   11 {
 
   12 //隊列頂端的變更消息
 
   13 fci = watcher.Get();
 
   14 //處理消息的代碼
 
   15 //Print(fci);
 
   16 }
 
   17 else
 
   18 {
 
   19 watcher.Open();
 
   20 }
 
   21 Thread.Sleep(1000);
 
   22 }
 
   復制代碼
 
   該程序實現了對文件目錄下所有子目錄和子文件的變化進行監控,并可通過FileChangeQueue屬性訪問文件變更消息,同時也可以設置其是否需要將數據持久化到磁盤文件中。
 
 
posted on 2014-02-16 15:26 HAOSOLA 閱讀(441) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
PK10開獎 PK10開獎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区视频| 国产精品毛片a∨一区二区三区|国 | 亚洲人成在线播放| 久久精品一二三区| 欧美一区二区视频在线| 一区二区三欧美| 一本色道久久88综合亚洲精品ⅰ| 亚洲成色www久久网站| 好吊色欧美一区二区三区四区| 欧美三级视频在线| 欧美日韩精品免费看| 欧美色欧美亚洲另类七区| 欧美日韩成人一区二区三区| 欧美电影在线观看完整版| 欧美精品在线网站| 欧美aⅴ一区二区三区视频| 欧美韩日精品| 欧美成人伊人久久综合网| 亚洲五月六月| 欧美日韩国产影片| 亚洲性线免费观看视频成熟| 欧美a级片网| 欧美不卡激情三级在线观看| 亚洲黄色精品| 亚洲第一区在线| 女仆av观看一区| 99精品视频一区二区三区| 亚洲精品一区二区三区av| 欧美日韩不卡| 久久精品视频在线观看| 久久精品成人一区二区三区| 狠狠色综合日日| 亚洲三级电影在线观看 | 亚洲视频欧美视频| 欧美高清hd18日本| 亚洲永久免费av| 久久精品99久久香蕉国产色戒| 亚洲国产美国国产综合一区二区| 亚洲激情在线播放| 国产精品午夜久久| 亚洲制服av| 亚洲免费不卡| 国产精品日本| 亚洲大片av| 国产精品久久久99| 亚洲图中文字幕| av成人动漫| 国产精品永久免费视频| 久久gogo国模裸体人体| 亚洲自拍偷拍色片视频| 国产精品视频网| 亚洲综合激情| 韩国成人精品a∨在线观看| 亚洲一区二区三区视频播放| 日韩午夜黄色| 狠狠干狠狠久久| 日韩视频在线观看国产| 国产精品二区影院| 久久精品成人一区二区三区| 欧美伊久线香蕉线新在线| 亚洲第一天堂av| 欧美一级黄色录像| 亚洲视频自拍偷拍| 老司机午夜精品视频| 一卡二卡3卡四卡高清精品视频 | 欧美日韩日本国产亚洲在线| 最近中文字幕日韩精品 | 国产乱肥老妇国产一区二| 一区二区三区欧美在线观看| 午夜精品在线视频| 亚洲人被黑人高潮完整版| 欧美一区二区三区在线免费观看| 亚洲一区二区三区在线看| 欧美日韩国产综合久久| 久久久人成影片一区二区三区| 国产欧美一级| 欧美在线啊v| 欧美大片在线观看一区| 在线看成人片| 伊人春色精品| 欧美sm视频| 亚洲三级免费观看| 欧美韩日一区二区| 每日更新成人在线视频| 99视频精品全部免费在线| 亚洲视频免费观看| 在线观看成人网| 国产日韩精品一区二区三区 | 久久久久中文| 亚洲一区二区三区四区在线观看| 久热国产精品| 亚洲福利视频在线| 亚洲伦伦在线| 伊人夜夜躁av伊人久久| 亚洲激情欧美| 欧美午夜视频一区二区| 免费成人网www| 亚洲欧美激情视频| av不卡在线| 亚洲一区免费网站| 国产精品乱码一区二区三区 | 裸体一区二区| 一区福利视频| 久久视频免费观看| 老司机午夜免费精品视频| 亚洲国产天堂久久综合| 亚洲区中文字幕| 欧美日韩一区国产| 欧美自拍偷拍| 午夜视频在线观看一区二区三区| 亚洲成人原创| 91久久黄色| 国产精品三上| 欧美国产日韩精品免费观看| 亚洲肉体裸体xxxx137| 久久久之久亚州精品露出| 久久精品国产v日韩v亚洲| 亚洲精品一区二| 久久男人av资源网站| 亚洲精选国产| 亚洲综合国产| 最新亚洲视频| 午夜天堂精品久久久久| 亚洲人体1000| 一区二区精品国产| 国产一区二区三区久久久| 欧美激情va永久在线播放| 国产精品黄视频| 免费在线观看日韩欧美| 国产精品亚洲第一区在线暖暖韩国| 亚洲国产成人av| 国产亚洲欧美另类中文| 日韩视频免费观看| 亚洲精品美女久久久久| 欧美在现视频| 欧美精品一区二区三区久久久竹菊| 亚洲欧美999| 欧美成人免费全部| 久久久免费av| 国产精品成av人在线视午夜片| 蜜桃久久精品乱码一区二区| 欧美一区二区三区的| 日韩天堂在线观看| 久久视频这里只有精品| 欧美一区二区三区四区视频| 欧美精品乱码久久久久久按摩| 久久三级视频| 国产精品高潮视频| 亚洲伦理网站| 亚洲人成人77777线观看| 久久久久久一区二区| 久久精品国产免费| 欧美极品在线观看| 99re在线精品| 在线视频亚洲一区| 欧美大片在线观看| 欧美激情一区二区三级高清视频| 伊伊综合在线| 亚洲视频导航| 久久婷婷久久| 黑人一区二区| 久久久水蜜桃| 美女诱惑一区| 亚洲国产小视频| 国产精品www| 一本色道久久综合亚洲精品小说 | 国产午夜精品一区二区三区欧美 | 国产一区二区三区久久悠悠色av| 亚洲女人天堂av| 久久精品国产成人| 激情成人中文字幕| 欧美日韩成人免费| 夜夜嗨一区二区三区| 亚洲一区高清| 国产精品亚洲综合久久| 午夜久久久久久| 亚洲欧美精品| 亚洲激情啪啪| 欧美日韩系列| 亚洲欧美成人在线| 久久精品五月婷婷| 在线免费观看欧美| 麻豆91精品91久久久的内涵| 亚洲精选中文字幕| 欧美日韩另类视频| 一区二区三区四区在线| 亚洲一区视频在线观看视频| 久久精品女人的天堂av| 欧美搞黄网站| 午夜精品免费在线| 麻豆精品精品国产自在97香蕉| 久久精品理论片| 亚洲日本欧美日韩高观看| 午夜国产欧美理论在线播放| 亚洲亚洲精品在线观看 | 一区二区三区鲁丝不卡| 亚洲欧洲免费视频| 久久久亚洲精品一区二区三区 | 农夫在线精品视频免费观看| 久久精品人人做人人爽|