狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#用FileSystemWatcher監視系統中目錄下文件的變動

admin
2023年12月26日 22:50 本文熱度 672

前沿:前不久在逛網的時候下到一個SyncPlicity軟件,是一種支持多文件夾的免費網絡同步工具。簡單的說就是安裝此軟件后您可以指定一個或多個監視目錄,當這些目錄中的文件發生改變后(重命名,刪除,移動,創建)他會將改動的內容傳給遠端服務器。這樣你在異地只要安裝了這個軟件,便可以從遠端服務器上同步到這些變動的文件,同時異地上的任何操作又將同樣的傳遞到本地。

        于是來了興趣,打算模擬一下如何去監視指定的目錄的變動。

        1、通過Timer來間隔檢測文件夾中的變動,主要是對最后時間進行判斷。

        2、能否基于系統提供的Api或類庫來實現監視?

        顯然,對于第一種方案是很不科學,也很不好把控的。如果用timer那么將會占用過多的資源,同時對于變動不能很明確的定位,在過深層級下的文件變動通過這種方式將很難遍歷到,即便能夠遍歷到則其中的遍歷也會增加系統的復雜度。然而在Net提供的類中有一個System.IO.FileSystemWatcher 通過命名就可以看出其功效——監視者。于是按照自己的思路進行Demo的編寫。

 1using System;
 2
using System.Collections.Generic;
 3
using System.Linq;
 4
using System.Text;
 5
using System.IO;
 6
namespace FileWatch
 7
{
 8
    class Program
 9
    {
10
        static void Main(string[] args)
11
        {
12
            //用于輸入需要監聽的路徑 例如 c:\
13
            string s = Console.ReadLine();
14            
new FileWatchClass(s);
15
            Console.ReadKey();
16
        }
17
    }
18

19
    class FileWatchClass
20
    {
21
        System.IO.FileSystemWatcher FileWatcher = new FileSystemWatcher ();
22
        public FileWatchClass(string WatcherPath)
23
        {
24
            FileWatcher.Filter = "*.*"//設定監聽的文件類型
25
            FileWatcher.Path = WatcherPath; //設定監聽的目錄
26
            FileWatcher.Changed += new FileSystemEventHandler(FileWatcher_Changed); //Changed 事件處理
27
            FileWatcher.Renamed += new RenamedEventHandler(FileWatcher_Renamed);//Renamed事件處理
28
            FileWatcher.Created += new FileSystemEventHandler(FileWatcher_Created);//Created事件處理
29
            FileWatcher.Deleted += new FileSystemEventHandler(FileWatcher_Deleted);//Deleted事件處理
30
            FileWatcher.IncludeSubdirectories = true;//設置監聽子目錄
31
            FileWatcher.EnableRaisingEvents = true;//開始進行監聽(其實此處是標示是否進行事件監聽和拋出)
32
        }
33

34
        void FileWatcher_Deleted(object sender, FileSystemEventArgs e)
35
        {
36
            Console.WriteLine(""+e.ChangeType+""+e.FullPath+" 刪除 ");
37
        }
38

39
        void FileWatcher_Created(object sender, FileSystemEventArgs e)
40
        {
41
            Console.WriteLine("" + e.ChangeType + "" + e.FullPath + " 被創建 ");
42
        }
43

44
        void FileWatcher_Renamed(object sender, RenamedEventArgs e)
45
        {
46
            Console.WriteLine("" + e.ChangeType + "" + e.OldFullPath + " 由原來名 " + e.OldName + " 改名為 " + e.Name);
47
        }
48

49
        void FileWatcher_Changed(object sender, FileSystemEventArgs e)
50
        {
51
            Console.WriteLine("" + e.ChangeType + "" + e.FullPath + " 發生改變 ");
52
        }
53
    }
54
}

編譯這個Demo,我們來進行測試一下。原來本打算只是實現功能,當測試時突然發現了系統在處理文件時的一些小信息:


1、同級目錄內復制文件(Test.txt) 結果為(捕獲到 一次創建,兩次改變):

【Created】c:\復制Test.txt  被創建

【Changed】c:\復制Test.txt  發生改變

【Changed】c:\復制Test.txt  發生改變


2、非同級目錄復制(Test.txt 復制到 Test文件夾下面)  結果為(捕獲到 一次創建,兩次改變+一次文件夾改變):

【Created】c:\Test\Test.txt  被創建

【Changed】c:\Test\Test.txt  發生改變

【Changed】c:\Test\Test.txt  發生改變

【Changed】c:\Test  發生改變


3、非同級的剪切 粘貼(Test.txt 剪切到 Test 文件夾下)結果為(捕獲到 一次刪除  一次創建 一次文件夾改變):

【Deleted】c:\Test.txt  刪除

【Created】c:\Test\Test.txt  被創建

【Changed】c:\Test  發生改變


可以看出一個小問題,對于未建立的文件,在創建時在創建后會出現兩次Changed,然而對于已經存在的文件移動在另一個目的地時沒有那“多余”的兩次Changed 這是為什么呢??


該文章在 2023/12/26 22:51:53 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved