FileSystemWatcher.Deleted 事件

定义

删除指定 Path 中的文件或目录时发生。

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

事件类型

属性

示例

以下示例使用 Deleted 事件在删除受监视文件时显示控制台的文件路径。

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);
            }
        }
    }
}

注解

某些常见事件(例如复制或移动文件或目录)不直接对应于事件,但这些事件确实会导致引发事件。 复制文件或目录时,系统会在文件复制到的目录中引发事件 Created (如果正在监视该目录)。 如果的另一个 实例 FileSystemWatcher正在监视从中复制的目录,则不会引发任何事件。 例如,创建 的两个 FileSystemWatcher实例。 FileSystemWatcher1 设置为“C:\My Documents”watch,FileSystemWatcher2 设置为watch“C:\Your Documents”。 如果将文件从“我的文档”复制到“你的文档”中, Created FileSystemWatcher2 将引发事件,但 FileSystemWatcher1 不会引发任何事件。 与复制不同,移动文件或目录会引发两个事件。 在前面的示例中,如果将文件从“My Documents”移动到“Your Documents”, Created FileSystemWatcher2 将引发事件, Deleted FileSystemWatcher1 将引发事件。

备注

常见的文件系统操作可能会引发多个事件。 例如,当文件从一个目录移动到另一个目录时,可能会引发多个 OnChanged 和一些 OnCreatedOnDeleted 事件。 移动文件是一项复杂的操作,由多个简单操作组成,因此引发多个事件。 同样,某些应用程序 (例如,防病毒软件) 可能会导致 检测到 FileSystemWatcher的其他文件系统事件。

备注

当 属性不是 nullSynchronizingObjectDeleted相对于其他FileSystemWatcher事件引发事件的顺序可能会更改。

适用于

产品 版本
.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

另请参阅