FileSystemWatcher.Changed 事件

定義

發生在指定之 Path 內的檔案或目錄變更時。

C#
public event System.IO.FileSystemEventHandler? Changed;
C#
public event System.IO.FileSystemEventHandler Changed;
C#
[System.IO.IODescription("FSW_Changed")]
public event System.IO.FileSystemEventHandler Changed;

事件類型

屬性

範例

下列範例會 Changed 使用 事件,在每當監看的檔案變更時,顯示主控台的檔案路徑。

C#
using System;
using System.IO;

namespace MyNamespace
{
    class MyClassCS
    {
        static void Main()
        {
            using var watcher = new FileSystemWatcher(@"C:\path\to\folder");

            watcher.NotifyFilter = NotifyFilters.Attributes
                                 | NotifyFilters.CreationTime
                                 | NotifyFilters.DirectoryName
                                 | NotifyFilters.FileName
                                 | NotifyFilters.LastAccess
                                 | NotifyFilters.LastWrite
                                 | NotifyFilters.Security
                                 | NotifyFilters.Size;

            watcher.Changed += OnChanged;
            watcher.Created += OnCreated;
            watcher.Deleted += OnDeleted;
            watcher.Renamed += OnRenamed;
            watcher.Error += OnError;

            watcher.Filter = "*.txt";
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;

            Console.WriteLine("Press enter to exit.");
            Console.ReadLine();
        }

        private static void OnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType != WatcherChangeTypes.Changed)
            {
                return;
            }
            Console.WriteLine($"Changed: {e.FullPath}");
        }

        private static void OnCreated(object sender, FileSystemEventArgs e)
        {
            string value = $"Created: {e.FullPath}";
            Console.WriteLine(value);
        }

        private static void OnDeleted(object sender, FileSystemEventArgs e) =>
            Console.WriteLine($"Deleted: {e.FullPath}");

        private static void OnRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"Renamed:");
            Console.WriteLine($"    Old: {e.OldFullPath}");
            Console.WriteLine($"    New: {e.FullPath}");
        }

        private static void OnError(object sender, ErrorEventArgs e) =>
            PrintException(e.GetException());

        private static void PrintException(Exception? ex)
        {
            if (ex != null)
            {
                Console.WriteLine($"Message: {ex.Message}");
                Console.WriteLine("Stacktrace:");
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine();
                PrintException(ex.InnerException);
            }
        }
    }
}

備註

Changed對所監視目錄中檔案或目錄的上次存取時間、上次存取時間或安全性許可權進行大小、系統屬性、上次寫入時間、上次存取時間或安全性許可權時,就會引發事件。

備註

常見的文件系統作業可能會引發一個以上的事件。 例如,當檔案從一個目錄移至另一個目錄時,可能會引發數 OnChanged 個和一些 OnCreatedOnDeleted 事件。 移動檔案是包含多個簡單作業的複雜作業,因此引發多個事件。 同樣地,某些應用程式 (例如,防病毒軟體) 可能會導致 偵測到的其他文件系統事件 FileSystemWatcher

使用 NotifyFilter 來限制處理此事件時所引發的通知數目。

備註

Changed重新命名檔案時,事件會意外引發,但在重新命名目錄時不會引發。 若要 watch 重新命名,請使用 Renamed 事件。

備註

當 屬性不是 nullSynchronizingObject,事件相對於其他FileSystemWatcher事件引發的順序Changed可能會變更。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另請參閱