FileSystemWatcher クラス


ファイル システムの変更通知を待機し、ディレクトリまたはディレクトリ内のファイルが変更されたときにイベントを発生させます。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 ref class FileSystemWatcher : System::ComponentModel::Component, IDisposable, System::ComponentModel::ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, IDisposable, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
type FileSystemWatcher = class
    interface IDisposable
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
type FileSystemWatcher = class
    inherit Component
    interface IDisposable
    interface ISupportInitialize
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
Public Class FileSystemWatcher
Inherits Component
Implements IDisposable, ISupportInitialize

次の例では、を作成して、 FileSystemWatcher 実行時に指定されたディレクトリを監視します。The following example creates a FileSystemWatcher to watch the directory specified at run time. コンポーネントは、 LastWrite LastAccess ディレクトリ内のテキストファイルの変更、作成、削除、または名前変更を監視するように設定されています。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.

#include "pch.h"

using namespace System;
using namespace System::IO;

class MyClassCPP

    int static Run()
        FileSystemWatcher^ watcher = gcnew FileSystemWatcher("C:\\path\\to\\folder");

        watcher->NotifyFilter = static_cast<NotifyFilters>(NotifyFilters::Attributes
                                                         | NotifyFilters::CreationTime
                                                         | NotifyFilters::DirectoryName
                                                         | NotifyFilters::FileName
                                                         | NotifyFilters::LastAccess
                                                         | NotifyFilters::LastWrite
                                                         | NotifyFilters::Security
                                                         | NotifyFilters::Size);

        watcher->Changed += gcnew FileSystemEventHandler(MyClassCPP::OnChanged);
        watcher->Created += gcnew FileSystemEventHandler(MyClassCPP::OnCreated);
        watcher->Deleted += gcnew FileSystemEventHandler(MyClassCPP::OnDeleted);
        watcher->Renamed += gcnew RenamedEventHandler(MyClassCPP::OnRenamed);
        watcher->Error   += gcnew ErrorEventHandler(MyClassCPP::OnError);

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

        Console::WriteLine("Press enter to exit.");

        return 0;


    static void OnChanged(Object^ sender, FileSystemEventArgs^ e)
        if (e->ChangeType != WatcherChangeTypes::Changed)
        Console::WriteLine("Changed: {0}", e->FullPath);

    static void OnCreated(Object^ sender, FileSystemEventArgs^ e)
        Console::WriteLine("Created: {0}", e->FullPath);

    static void OnDeleted(Object^ sender, FileSystemEventArgs^ e)
        Console::WriteLine("Deleted: {0}", e->FullPath);

    static void OnRenamed(Object^ sender, RenamedEventArgs^ e)
        Console::WriteLine("    Old: {0}", e->OldFullPath);
        Console::WriteLine("    New: {0}", e->FullPath);

    static void OnError(Object^ sender, ErrorEventArgs^ e)

    static void PrintException(Exception^ ex)
        if (ex != nullptr)
            Console::WriteLine("Message: {0}", ex->Message);

int main()
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.");

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

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

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

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

        private static void OnError(object sender, ErrorEventArgs e) =>

        private static void PrintException(Exception? ex)
            if (ex != null)
                Console.WriteLine($"Message: {ex.Message}");
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

                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.")
            End Using
        End Sub

        Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
            If e.ChangeType <> WatcherChangeTypes.Changed Then
            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}"
        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($"    Old: {e.OldFullPath}")
            Console.WriteLine($"    New: {e.FullPath}")
        End Sub

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

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

    End Class

End Namespace


FileSystemWatcher指定されたディレクトリの変更を監視するために使用します。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.

すべてのファイルの変更を監視するに Filter は、プロパティを空の文字列 ("") に設定するか、ワイルドカード ("*.") を使用 * します。To watch for changes in all files, set the Filter property to an empty string ("") or use wildcards ("*.*"). 特定のファイルを監視するには、 Filter プロパティをファイル名に設定します。To watch a specific file, set the Filter property to the file name. たとえば、ファイル MyDoc.txt の変更を監視するには、プロパティを Filter "MyDoc.txt" に設定します。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. たとえば、テキストファイルの変更を監視するには、 Filter プロパティを ".txt" に設定し * ます。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. たとえば、の変更 AttributesLastWrite 日付と時刻、または Size ファイルやディレクトリのを監視することができます。For example, you can watch for changes in Attributes, the LastWrite date and time, or the Size of files or directories. これを行うには、 NotifyFilter プロパティを値のいずれかに設定し NotifyFilters ます。This is done by setting the NotifyFilter property to one of the NotifyFilters values. 監視できる変更の種類の詳細については、「」を参照してください NotifyFiltersFor more information on the type of changes you can watch, see NotifyFilters.

ファイルまたはディレクトリの名前変更、削除、または作成を監視できます。You can watch for renaming, deletion, or creation of files or directories. たとえば、テキストファイルの名前変更を監視するには、 Filter プロパティを "* .txt" に設定し、 WaitForChanged Renamed パラメーターに指定されたを使用してメソッドを呼び出します。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.

Windows オペレーティングシステムは、によって作成されたバッファー内のファイル変更をコンポーネントに通知 FileSystemWatcher します。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. プロパティを使用してバッファーのサイズを大きくする InternalBufferSize と、ディスクにスワップできない非ページメモリから取得されるため、コストが高くなります。そのため、ファイル変更イベントを見逃すことがないように、バッファーのサイズを小さくしておく必要があります。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. バッファーオーバーフローを回避するには、プロパティとプロパティを使用して、 NotifyFilter IncludeSubdirectories 不要な変更通知を除外できるようにします。To avoid a buffer overflow, use the NotifyFilter and IncludeSubdirectories properties so you can filter out unwanted change notifications.

のインスタンスの初期プロパティ値の一覧につい FileSystemWatcher ては、コンストラクターを参照してください FileSystemWatcherFor a list of initial property values for an instance of FileSystemWatcher, see the FileSystemWatcher constructor.

クラスを使用する場合は、次の点に注意してください FileSystemWatcherPlease note the following when using the FileSystemWatcher class.

  • 隠しファイルは無視されません。Hidden files are not ignored.

  • システムによっては、 FileSystemWatcher 短い8.3 ファイル名形式を使用してファイルが変更されることがあります。In some systems, FileSystemWatcher reports changes to files using the short 8.3 file name format. たとえば、"LongFileName. Longfilename" への変更は、"LongFil ~ として報告される可能性があります。Lon "。For example, a change to "LongFileName.LongExtension" could be reported as "LongFil~.Lon".

  • このクラスには、リンク確認要求と、すべてのメンバーに適用されるクラス レベルの継承確認要求が含まれています。This class contains a link demand and an inheritance demand at the class level that applies to all members. 直接の呼び出し元か派生クラスのいずれかに完全信頼アクセス許可がない場合、SecurityException がスローされます。A SecurityException is thrown when either the immediate caller or the derived class does not have full-trust permission. セキュリティ要求の詳細については、「リンク確認要求」を参照してください。For details about security demands, see Link Demands.

  • InternalBufferSizeネットワーク経由でディレクトリを監視するためのプロパティに設定できる最大サイズは 64 KB です。The maximum size you can set for the InternalBufferSize property for monitoring a directory over the network is 64 KB.

フォルダーのコピーと移動Copying and moving folders

オペレーティングシステムとオブジェクトは、 FileSystemWatcher フォルダーとそのコンテンツの名前変更アクションとして、切り取りと貼り付けの操作または移動操作を解釈します。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. ファイルが含まれているフォルダーを切り取って、監視されているフォルダーに貼り付けると、 FileSystemWatcher オブジェクトはフォルダーのみを新規として報告しますが、基本的には名前が変更されるだけなので、その内容は報告しません。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.

フォルダーの内容が監視対象フォルダーに移動またはコピーされたことを通知するには、 OnChanged OnRenamed 次の表に示すように、イベントハンドラーメソッドを指定します。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, DeletedChanged, 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. たとえば、あるディレクトリから別のディレクトリにファイルを移動すると、いくつかの OnChanged OnCreated OnDeleted イベントとイベントが発生する可能性があります。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. 同様に、一部のアプリケーション (ウイルス対策ソフトウェアなど) によって、によって検出された追加のファイルシステムイベントが発生する可能性があり FileSystemWatcher ます。Likewise, some applications (for example, antivirus software) might cause additional file system events that are detected by FileSystemWatcher.

  • は、 FileSystemWatcher スイッチまたは削除されていない限り、ディスクを見ることができます。The FileSystemWatcher can watch disks as long as they are not switched or removed. では、 FileSystemWatcher タイムスタンプとプロパティを変更できないため、cd と dvd のイベントは発生しません。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.

では、 FileSystemWatcher バッファーサイズを超えた場合にイベントが発生しない可能性があることに注意してください。Note that a FileSystemWatcher may miss an event when the buffer size is exceeded. 見つからないイベントを回避するには、次のガイドラインに従ってください。To avoid missing events, follow these guidelines:

  • プロパティを設定して、バッファーサイズを増やし InternalBufferSize ます。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.



FileSystemWatcher クラスの新しいインスタンスを初期化します。Initializes a new instance of the FileSystemWatcher class.


監視するディレクトリを指定して、FileSystemWatcher クラスの新しいインスタンスを初期化します。Initializes a new instance of the FileSystemWatcher class, given the specified directory to monitor.

FileSystemWatcher(String, String)

FileSystemWatcher クラスの新しいインスタンスを、監視するディレクトリとファイルの種類を指定して初期化します。Initializes a new instance of the FileSystemWatcher class, given the specified directory and type of files to monitor.



コンポーネントがイベントを発生させることがきるかどうかを示す値を取得します。Gets a value indicating whether the component can raise an event.

(継承元 Component)

IContainer を含む Component を取得します。Gets the IContainer that contains the Component.

(継承元 Component)

Component が現在デザイン モードかどうかを示す値を取得します。Gets a value that indicates whether the Component is currently in design mode.

(継承元 Component)

コンポーネントが有効かどうかを示す値を取得または設定します。Gets or sets a value indicating whether the component is enabled.


Component に結び付けられているイベント ハンドラーのリストを取得します。Gets the list of event handlers that are attached to this Component.

(継承元 Component)

ディレクトリで監視するファイルを決定するために使用するフィルター文字列を取得または設定します。Gets or sets the filter string used to determine what files are monitored in a directory.


ディレクトリ内で監視するファイルを決定するために、使用されているすべてのフィルターのコレクションを取得します。Gets the collection of all the filters used to determine what files are monitored in a directory.


指定したパスのサブディレクトリを監視するかどうかを示す値を取得または設定します。Gets or sets a value indicating whether subdirectories within the specified path should be monitored.


内部バッファーのサイズ (バイト単位) を取得または設定します。Gets or sets the size (in bytes) of the internal buffer.


ウォッチする変更の種類を取得または設定します。Gets or sets the type of changes to watch for.


ウォッチするディレクトリのパスを取得または設定します。Gets or sets the path of the directory to watch.


ISiteFileSystemWatcher を取得または設定します。Gets or sets an ISite for the FileSystemWatcher.


ディレクトリ変更の結果として発行されるイベント ハンドラー呼び出しをマーシャリングするために使用するオブジェクトを取得または設定します。Gets or sets the object used to marshal the event handler calls issued as a result of a directory change.



フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を開始します。Begins the initialization of a FileSystemWatcher used on a form or used by another component. 初期化は実行時に発生します。The initialization occurs at run time.


リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(継承元 MarshalByRefObject)

FileSystemWatcher で使用されるアンマネージ リソースを解放します。Releases the unmanaged resources used by the FileSystemWatcher.


Component によって使用されているすべてのリソースを解放します。Releases all resources used by the Component.

(継承元 Component)

FileSystemWatcher によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。Releases the unmanaged resources used by the FileSystemWatcher and optionally releases the managed resources.


フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を終了します。Ends the initialization of a FileSystemWatcher used on a form or used by another component. 初期化は実行時に発生します。The initialization occurs at run time.


指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)

現在のインスタンスに保持されているリソースを解放します。Releases the resources held by the current instance.


既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(継承元 MarshalByRefObject)

Component またはその Container で提供されるサービスを表すオブジェクトを返します。Returns an object that represents a service provided by the Component or by its Container.

(継承元 Component)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。Obtains a lifetime service object to control the lifetime policy for this instance.

(継承元 MarshalByRefObject)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。Creates a shallow copy of the current MarshalByRefObject object.

(継承元 MarshalByRefObject)

Changed イベントを発生させます。Raises the Changed event.


Created イベントを発生させます。Raises the Created event.


Deleted イベントを発生させます。Raises the Deleted event.


Error イベントを発生させます。Raises the Error event.


Renamed イベントを発生させます。Raises the Renamed event.


Component の名前 (存在する場合) を格納する String を返します。Returns a String containing the name of the Component, if any. このメソッドはオーバーライドできません。This method should not be overridden.

(継承元 Component)

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(継承元 Object)

監視する変更の種類を指定して、発生した変更についての固有な情報を格納する構造体を返す同期メソッド。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.

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.



指定した Path のファイルまたはディレクトリが変更されたときに発生します。Occurs when a file or directory in the specified Path is changed.


指定した Path のファイルまたはディレクトリが作成されたときに発生します。Occurs when a file or directory in the specified Path is created.


指定した Path のファイルまたはディレクトリが削除されたときに発生します。Occurs when a file or directory in the specified Path is deleted.


Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。Occurs when the component is disposed by a call to the Dispose() method.

(継承元 Component)

FileSystemWatcher のインスタンスが変更の監視を続けられない場合、または内部バッファー オーバーフローの場合に発生します。Occurs when the instance of FileSystemWatcher is unable to continue monitoring changes or when the internal buffer overflows.


指定した Path のファイルまたはディレクトリの名前が変更されたときに発生します。Occurs when a file or directory in the specified Path is renamed.