System.IO.FileSystemWatcher 類別
本文提供此 API 參考文件的補充備註。
用來 FileSystemWatcher 監看指定目錄中的變更。 您可以監看指定目錄的檔案和子目錄變更。 您可以建立元件來監看本機計算機、網路驅動器機或遠端電腦上的檔案。
若要監看所有檔案中的變更,請將 Filter 屬性設定為空字串串 (“”)或使用通配符 (“*.*”。 若要監看特定檔案,請將 Filter 屬性設定為檔名。 例如,若要監看檔案MyDoc.txt中的變更,請將 屬性設定 Filter 為 “MyDoc.txt”。 您也可以監看特定類型的檔案變更。 例如,若要監看文本檔中的變更,請將 Filter 屬性設定為 “*.txt”。
您可以在目錄或檔案中監看數種類型的變更。 例如,您可以監看 、Attributes
LastWrite
日期和時間或Size
檔案或目錄的變更。 這是藉由將 NotifyFilter 屬性設定為其中 NotifyFilters 一個值來完成。 如您可以監看之變更類型的詳細資訊,請參閱 NotifyFilters。
您可以監看重新命名、刪除或建立檔案或目錄。 例如,若要監看文本檔的重新命名,請將 Filter 屬性設定為 “*.txt”,並使用為其參數指定的 呼叫 WaitForChanged 方法 Renamed 。
Windows 作業系統會在 所建立的緩衝區中通知您的 FileSystemWatcher檔案變更。 如果短時間內有許多變更,緩衝區可能會溢位。 這會導致元件遺失目錄中的變更追蹤,而且只會提供毛毯式通知。 使用 InternalBufferSize 屬性增加緩衝區的大小相當昂貴,因為它來自無法交換到磁碟的非分頁記憶體,因此請將緩衝區保留為小到大,無法錯過任何檔案變更事件。 若要避免緩衝區溢位,請使用 NotifyFilter 和 IncludeSubdirectories 屬性,以便篩選掉不必要的變更通知。
如需 實例 FileSystemWatcher的初始屬性值清單,請參閱 建構函式 FileSystemWatcher 。
使用 FileSystemWatcher 類別時的考慮:
- 不會忽略隱藏的檔案。
- 在某些系統中, FileSystemWatcher 會使用簡短的 8.3 檔名格式來報告檔案的變更。 例如,將 “LongFileName.LongExtension” 的變更報告為 “LongFil~”。Lon”。
- 這個類別包含適用於所有成員之類別層級的連結需求和繼承需求。 SecurityException當立即呼叫端或衍生類別沒有完全信任權限時,會擲回 。 如需安全性需求的詳細資訊,請參閱 連結需求。
- 您可以為 InternalBufferSize 屬性設定的大小上限,用於透過網路監視目錄是 64 KB。
複製和移動資料夾
操作系統和 FileSystemWatcher 物件會將剪貼動作或移動動作解譯為資料夾及其內容的重新命名動作。 如果您將含有檔案的資料夾剪下並貼到要監看的資料夾, FileSystemWatcher 物件只會將資料夾報告為新資料夾,但不會報告其內容,因為它們基本上只會重新命名。
若要通知資料夾的內容已移動或複製到監看式資料夾,請提供 OnChanged 和 OnRenamed 事件處理程式方法,如下表所示。
事件處理常式 | 已處理的事件 | 執行 |
---|---|---|
OnChanged | Changed、 、 CreatedDeleted | 報告檔案屬性、已建立的檔案和已刪除檔案中的變更。 |
OnRenamed | Renamed | 列出已重新命名檔案和資料夾的舊路徑和新路徑,視需要以遞歸方式展開。 |
事件和緩衝區大小
請注意,有數個因素可能會影響引發哪些文件系統變更事件,如下所述:
- 常見的文件系統作業可能會引發一個以上的事件。 例如,當檔案從某個目錄移至另一個目錄時,可能會引發數 OnChanged 個和部分 OnCreated 和 OnDeleted 事件。 移動檔案是包含多個簡單作業的複雜作業,因此會引發多個事件。 同樣地,某些應用程式(例如防病毒軟體)可能會造成 所 FileSystemWatcher偵測到的其他文件系統事件。
- FileSystemWatcher只要磁碟未切換或移除,就可以監看磁碟。 FileSystemWatcher不會引發CD和 DVD 的事件,因為時間戳和屬性無法變更。 遠端電腦必須安裝其中一個必要平臺,元件才能正常運作。
請注意, FileSystemWatcher 超過緩衝區大小時,可能會遺漏 事件。 若要避免遺漏事件,請遵循下列指導方針:
- 藉由設定 InternalBufferSize 屬性來增加緩衝區大小。
- 避免監看具有長檔名的檔案,因為長檔名有助於填滿緩衝區。 請考慮使用較短的名稱重新命名這些檔案。
- 儘可能縮短您的事件處理程序代碼。