Export (0) Print
Expand All

FileSystemWatcher Class

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

For a list of all members of this type, see FileSystemWatcher Members.

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.IO.FileSystemWatcher

[Visual Basic]
Public Class FileSystemWatcher
   Inherits Component
   Implements ISupportInitialize
[C#]
public class FileSystemWatcher : Component, ISupportInitialize
[C++]
public __gc class FileSystemWatcher : public Component,
   ISupportInitialize
[JScript]
public class FileSystemWatcher extends Component implements
   ISupportInitialize

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

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

Note   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 these platforms installed for the component to function properly. However, you cannot watch a remote Windows NT 4.0 computer from a Windows NT 4.0 computer.

To watch for changes in all files, set the Filter property to an empty string (""). 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".

Note   Hidden files are not ignored.

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 FileSystemWatcher.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 one of the WaitForChanged methods with the WatcherChangeTypes value Renamed given.

Note   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, anti-virus software) might cause additional file system events that are detected by FileSystemWatcher.

The system notifies the component of file changes in a buffer the component creates and passes to the Application Programming Interfaces. 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 is expensive, as it comes from non-paged memory that cannot be swapped out to disk, so keep the buffer as small as possible. To avoid a buffer overflow, use the NotifyFilter, and IncludeSubdirectories properties so you can filter out unwanted change notifications. For more information on buffer size, see InternalBufferSize.

Note   Setting the Filter does not decrease what goes into the buffer.

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

Example

[Visual Basic, C#, C++] The following example creates a FileSystemWatcher to watch the directory specified at runtime. 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.

[Visual Basic, C#, C++] Use the System.Diagnostics and System.IO namespaces for this example.

[Visual Basic] 
Public Class Watcher
    
    Public Shared Sub Main()
        Dim args() As String = System.Environment.GetCommandLineArgs()
        ' If a directory is not specified, exit the program.
        If args.Length <> 2 Then
            ' Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)")
            Return
        End If
        
        ' Create a new FileSystemWatcher and set its properties.
        Dim watcher As New FileSystemWatcher()
        watcher.Path = args(1)
        ' Watch for changes in LastAccess and LastWrite times, and
        ' the renaming of files or directories. 
        watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
        ' Only watch text files.
        watcher.Filter = "*.txt"
        
        ' Add event handlers.
        AddHandler watcher.Changed, AddressOf OnChanged
        AddHandler watcher.Created, AddressOf OnChanged
        AddHandler watcher.Deleted, AddressOf OnChanged
        AddHandler watcher.Renamed, AddressOf OnRenamed
        
        ' Begin watching.
        watcher.EnableRaisingEvents = True
        
        ' Wait for the user to quit the program.
        Console.WriteLine("Press 'q' to quit the sample.")
        While Chr(Console.Read()) <> "q"c
        End While
    End Sub
     
    ' Define the event handlers.
    Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
        ' Specify what is done when a file is changed, created, or deleted.
        Console.WriteLine("File: " & e.FullPath & " " & e.ChangeType)
    End Sub    
    
    Private Shared Sub OnRenamed(source As Object, e As RenamedEventArgs)
        ' Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath)
    End Sub
    
End Class


[C#] 
public class Watcher
{

    public static void Main()
    {

        string[] args = System.Environment.GetCommandLineArgs();
 
        // If a directory is not specified, exit program.
        if(args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = args[1];
        /* Watch for changes in LastAccess and LastWrite times, and 
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }
}


[C++] 
public __gc class Watcher
{
public:
    // Define the event handlers.
    static void OnChanged(Object* /*source*/, FileSystemEventArgs* e)
    {
        // Specify what is done when a file is changed, created, or deleted.
        Console::WriteLine(S"File: {0} {1}", e->FullPath, __box(e->ChangeType));
    }

    static void OnRenamed(Object* /*source*/, RenamedEventArgs* e)
    {
        // Specify what is done when a file is renamed.
        Console::WriteLine(S"File: {0} renamed to {1}", e->OldFullPath, e->FullPath);
    }
};


int main()
{

    String* args[] = System::Environment::GetCommandLineArgs();

    // If a directory is not specified, exit program.
    if(args->Length != 2)
    {
        // Display the proper way to call the program.
        Console::WriteLine(S"Usage: Watcher.exe (directory)");
        return 0;
    }

    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher* watcher = new FileSystemWatcher();
    watcher->Path = args[1];
    /* Watch for changes in LastAccess and LastWrite times, and 
    the renaming of files or directories. */
    watcher->NotifyFilter = static_cast<NotifyFilters>( NotifyFilters::LastAccess | NotifyFilters::LastWrite 
        | NotifyFilters::FileName | NotifyFilters::DirectoryName );
    // Only watch text files.
    watcher->Filter = S"*.txt";

    // Add event handlers.
    watcher->Changed += new FileSystemEventHandler(0, Watcher::OnChanged);
    watcher->Created += new FileSystemEventHandler(0, Watcher::OnChanged);
    watcher->Deleted += new FileSystemEventHandler(0, Watcher::OnChanged);
    watcher->Renamed += new RenamedEventHandler(0, Watcher::OnRenamed);

    // Begin watching.
    watcher->EnableRaisingEvents = true;

    // Wait for the user to quit the program.
    Console::WriteLine(S"Press \'q\' to quit the sample.");
    while(Console::Read()!='q');
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Namespace: System.IO

Platforms: Windows NT Server 4.0, Windows NT Workstation 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

Assembly: System (in System.dll)

See Also

FileSystemWatcher Members | System.IO Namespace | FileSystemWatcher.NotifyFilter | NotifyFilters | FileSystemEventArgs | FileSystemEventHandler | Filter | IncludeSubdirectories | InternalBufferOverflowException | RenamedEventArgs | RenamedEventHandler | WaitForChangedResult | WatcherChangeTypes

Show:
© 2014 Microsoft