Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

FileSystemWatcher Class

Definition

Namespace:
System.IO
Assemblies:
netstandard.dll, System.IO.FileSystem.Watcher.dll
Assembly:
System.IO.FileSystem.Watcher.dll
Assembly:
System.dll
Assembly:
netstandard.dll
Source:
FileSystemWatcher.cs
Source:
FileSystemWatcher.cs
Source:
FileSystemWatcher.cs
Source:
FileSystemWatcher.cs
Source:
FileSystemWatcher.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Listens to the file system change notifications and raises events when a directory, or file in a directory, changes.

public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
 inherit Component
 interface ISupportInitialize
type FileSystemWatcher = class
 interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
 inherit Component
 interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
Inheritance
FileSystemWatcher
Inheritance
FileSystemWatcher
Attributes
Implements

Examples

The following example creates a FileSystemWatcher to watch the directory specified at run time. The component is set to watch for changes in LastWrite and LastAccess time, the creation, deletion, or renaming of text files in the directory. If a file is changed, created, or deleted, the path to the file prints to the console. When a file is renamed, the old and new paths print to the console.

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);
 }
 }
 }
}
Imports System.IO

Namespace MyNamespace

 Class MyClassVB

 Shared Sub Main()
 Using watcher = New FileSystemWatcher("C:\path\to\folder")
 watcher.NotifyFilter = NotifyFilters.Attributes Or
 NotifyFilters.CreationTime Or
 NotifyFilters.DirectoryName Or
 NotifyFilters.FileName Or
 NotifyFilters.LastAccess Or
 NotifyFilters.LastWrite Or
 NotifyFilters.Security Or
 NotifyFilters.Size

 AddHandler watcher.Changed, AddressOf OnChanged
 AddHandler watcher.Created, AddressOf OnCreated
 AddHandler watcher.Deleted, AddressOf OnDeleted
 AddHandler watcher.Renamed, AddressOf OnRenamed
 AddHandler watcher.Error, AddressOf OnError

 watcher.Filter = "*.txt"
 watcher.IncludeSubdirectories = True
 watcher.EnableRaisingEvents = True

 Console.WriteLine("Press enter to exit.")
 Console.ReadLine()
 End Using
 End Sub

 Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
 If e.ChangeType <> WatcherChangeTypes.Changed Then
 Return
 End If
 Console.WriteLine($"Changed: {e.FullPath}")
 End Sub

 Private Shared Sub OnCreated(sender As Object, e As FileSystemEventArgs)
 Dim value As String = $"Created: {e.FullPath}"
 Console.WriteLine(value)
 End Sub

 Private Shared Sub OnDeleted(sender As Object, e As FileSystemEventArgs)
 Console.WriteLine($"Deleted: {e.FullPath}")
 End Sub

 Private Shared Sub OnRenamed(sender As Object, e As RenamedEventArgs)
 Console.WriteLine($"Renamed:")
 Console.WriteLine($" Old: {e.OldFullPath}")
 Console.WriteLine($" New: {e.FullPath}")
 End Sub

 Private Shared Sub OnError(sender As Object, e As ErrorEventArgs)
 PrintException(e.GetException())
 End Sub

 Private Shared Sub PrintException(ex As Exception)
 If ex IsNot Nothing Then
 Console.WriteLine($"Message: {ex.Message}")
 Console.WriteLine("Stacktrace:")
 Console.WriteLine(ex.StackTrace)
 Console.WriteLine()
 PrintException(ex.InnerException)
 End If
 End Sub

 End Class

End Namespace

Remarks

Use FileSystemWatcher to watch for changes in a specified directory. You can watch for changes in files and subdirectories of the specified directory. You can create a component to watch files on a local computer, a network drive, or a remote computer.

To watch for changes in all files, set the Filter property to an empty string ("") or use wildcards ("*.*"). To watch a specific file, set the Filter property to the file name. For example, to watch for changes in the file MyDoc.txt, set the Filter property to "MyDoc.txt". You can also watch for changes in a certain type of file. For example, to watch for changes in text files, set the Filter property to "*.txt".

There are several types of changes you can watch for in a directory or file. For example, you can watch for changes in Attributes, the LastWrite date and time, or the Size of files or directories. This is done by setting the NotifyFilter property to one of the NotifyFilters values. For more information on the type of changes you can watch, see NotifyFilters.

You can watch for renaming, deletion, or creation of files or directories. For example, to watch for renaming of text files, set the Filter property to "*.txt" and call the WaitForChanged method with a Renamed specified for its parameter.

The Windows operating system notifies your component of file changes in a buffer created by the FileSystemWatcher. If there are many changes in a short time, the buffer can overflow. This causes the component to lose track of changes in the directory, and it will only provide blanket notification. Increasing the size of the buffer with the InternalBufferSize property is expensive, as it comes from non-paged memory that cannot be swapped out to disk, so keep the buffer as small yet large enough to not miss any file change events. To avoid a buffer overflow, use the NotifyFilter and IncludeSubdirectories properties so you can filter out unwanted change notifications.

For a list of initial property values for an instance of FileSystemWatcher, see the FileSystemWatcher constructor.

Consider the following facts when you use the FileSystemWatcher class:

  • Hidden files aren't ignored.
  • In some systems, FileSystemWatcher reports changes to files using the short 8.3 file name format. For example, a change to "LongFileName.LongExtension" could be reported as "LongFil~.Lon".
  • The maximum size you can set for the InternalBufferSize property for monitoring a directory over the network is 64 KB.

Copy and move folders

The operating system and FileSystemWatcher object interpret a cut-and-paste action or a move action as a rename action for a folder and its contents. If you cut and paste a folder with files into a folder being watched, the FileSystemWatcher object reports only the folder as new, but not its contents because they are essentially only renamed.

To be notified that the contents of folders have been moved or copied into a watched folder, provide OnChanged and OnRenamed event handler methods as suggested in the following table.

Event Handler Events Handled Performs
OnChanged Changed, Created, Deleted Report changes in file attributes, created files, and deleted files.
OnRenamed Renamed List the old and new paths of renamed files and folders, expanding recursively if needed.

Events and buffer sizes

Note that several factors can affect which file system change events are raised, as described by the following:

  • Common file system operations might raise more than one event. For example, when a file is moved from one directory to another, several OnChanged and some OnCreated and OnDeleted events might be raised. Moving a file is a complex operation that consists of multiple simple operations, therefore raising multiple events. Likewise, some applications (for example, antivirus software) might cause additional file system events that are detected by FileSystemWatcher.
  • The FileSystemWatcher can watch disks as long as they are not switched or removed. The FileSystemWatcher does not raise events for CDs and DVDs, because time stamps and properties cannot change. Remote computers must have one of the required platforms installed for the component to function properly.

Note that a FileSystemWatcher may miss an event when the buffer size is exceeded. To avoid missing events, follow these guidelines:

  • Increase the buffer size by setting the InternalBufferSize property.
  • Avoid watching files with long file names, because a long file name contributes to filling up the buffer. Consider renaming these files using shorter names.
  • Keep your event handling code as short as possible.

Constructors

Name Description
FileSystemWatcher()

Initializes a new instance of the FileSystemWatcher class.

FileSystemWatcher(String, String)

Initializes a new instance of the FileSystemWatcher class, given the specified directory and type of files to monitor.

FileSystemWatcher(String)

Initializes a new instance of the FileSystemWatcher class, given the specified directory to monitor.

Properties

Name Description
CanRaiseEvents

Gets a value indicating whether the component can raise an event.

(Inherited from Component)
Container

Gets the IContainer that contains the Component.

(Inherited from Component)
DesignMode

Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
EnableRaisingEvents

Gets or sets a value indicating whether the component is enabled.

Events

Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
Filter

Gets or sets the filter string used to determine what files are monitored in a directory.

Filters

Gets the collection of all the filters used to determine what files are monitored in a directory.

IncludeSubdirectories

Gets or sets a value indicating whether subdirectories within the specified path should be monitored.

InternalBufferSize

Gets or sets the size (in bytes) of the internal buffer.

NotifyFilter

Gets or sets the type of changes to watch for.

Path

Gets or sets the path of the directory to watch.

Site

Gets or sets an ISite for the FileSystemWatcher.

SynchronizingObject

Gets or sets the object used to marshal the event handler calls issued as a result of a directory change.

Methods

Name Description
BeginInit()

Begins the initialization of a FileSystemWatcher used on a form or used by another component. The initialization occurs at run time.

CreateObjRef(Type)

Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose()

Releases the unmanaged resources used by the FileSystemWatcher.

Dispose()

Releases all resources used by the Component.

(Inherited from Component)
Dispose(Boolean)

Releases the unmanaged resources used by the FileSystemWatcher and optionally releases the managed resources.

EndInit()

Ends the initialization of a FileSystemWatcher used on a form or used by another component. The initialization occurs at run time.

Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetLifetimeService()
Obsolete.

Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type)

Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetType()

Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService()
Obsolete.

Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean)

Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
OnChanged(FileSystemEventArgs)

Raises the Changed event.

OnCreated(FileSystemEventArgs)

Raises the Created event.

OnDeleted(FileSystemEventArgs)

Raises the Deleted event.

OnError(ErrorEventArgs)

Raises the Error event.

OnRenamed(RenamedEventArgs)

Raises the Renamed event.

ToString()

Returns a String containing the name of the Component, if any. This method should not be overridden.

(Inherited from Component)
ToString()

Returns a string that represents the current object.

(Inherited from Object)
WaitForChanged(WatcherChangeTypes, Int32)

A synchronous method that returns a structure that contains specific information on the change that occurred, given the type of change you want to monitor and the time (in milliseconds) to wait before timing out.

WaitForChanged(WatcherChangeTypes, TimeSpan)

Synchronously returns a structure that contains specific information on the change that occurred, given the type of change to monitor.

WaitForChanged(WatcherChangeTypes)

A synchronous method that returns a structure that contains specific information on the change that occurred, given the type of change you want to monitor.

Events

Name Description
Changed

Occurs when a file or directory in the specified Path is changed.

Created

Occurs when a file or directory in the specified Path is created.

Deleted

Occurs when a file or directory in the specified Path is deleted.

Disposed

Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)
Error

Occurs when the instance of FileSystemWatcher is unable to continue monitoring changes or when the internal buffer overflows.

Renamed

Occurs when a file or directory in the specified Path is renamed.

Applies to

See also


Feedback

Was this page helpful?