FileSystemWatcher クラス

定義

ファイル システムの変更通知を待機し、ディレクトリまたはディレクトリ内のファイルが変更されたときにイベントを発生させます。

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
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, IDisposable, System.ComponentModel.ISupportInitialize
[System.IO.IODescription("")]
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
type FileSystemWatcher = class
    inherit Component
    interface IDisposable
    interface ISupportInitialize
[<System.IO.IODescription("")>]
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
継承
FileSystemWatcher
属性
実装

次の例では、 FileSystemWatcher 実行時に指定されたディレクトリを監視するためのディレクトリを作成します。 このコンポーネントは、ディレクトリ内のテキスト ファイルの LastWrite 変更、 LastAccess 作成、削除、または名前変更を監視するように設定されています。 ファイルが変更、作成、または削除されると、ファイルへのパスがコンソールに出力されます。 ファイルの名前が変更されると、古いパスと新しいパスがコンソールに出力されます。

#include "pch.h"

using namespace System;
using namespace System::IO;

class MyClassCPP
{
public:

    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.");
        Console::ReadLine();

        return 0;
    }

private:

    static void OnChanged(Object^ sender, FileSystemEventArgs^ e)
    {
        if (e->ChangeType != WatcherChangeTypes::Changed)
        {
            return;
        }
        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("Renamed:");
        Console::WriteLine("    Old: {0}", e->OldFullPath);
        Console::WriteLine("    New: {0}", e->FullPath);
    }

    static void OnError(Object^ sender, ErrorEventArgs^ e)
    {
        PrintException(e->GetException());
    }

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


int main()
{
    MyClassCPP::Run();
}
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

注釈

指定したディレクトリの変更を監視するために使用 FileSystemWatcher します。 指定したディレクトリのファイルとサブディレクトリの変更を監視できます。 ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューターでファイルを監視するコンポーネントを作成できます。

すべてのファイルの変更を監視するには、プロパティを空の Filter 文字列 ("") に設定するか、ワイルドカード ("*.*") を使用します。 特定のファイルを監視するには、プロパティを Filter ファイル名に設定します。 たとえば、ファイル MyDoc.txtの変更を監視するには、プロパティを Filter "MyDoc.txt" に設定します。 特定の種類のファイルの変更を監視することもできます。 たとえば、テキスト ファイルの変更を監視するには、プロパティを Filter ".txt"* に設定します。

ディレクトリまたはファイルで監視できる変更には、いくつかの種類があります。 たとえば、ファイルまたはディレクトリの Attributes変更、 LastWrite 日付と時刻、または変更を Size 監視できます。 これを行うには、プロパティを NotifyFilter いずれかの値に NotifyFilters 設定します。 監視できる変更の種類の詳細については、次を参照してください NotifyFilters

ファイルまたはディレクトリの名前変更、削除、または作成を監視できます。 たとえば、テキスト ファイルの名前変更を監視するには、プロパティを Filter "*.txt" に設定し、パラメーターに WaitForChanged 指定したメソッドを Renamed 呼び出します。

Windowsオペレーティング システムは、によって作成されたバッファー内のファイルの変更をコンポーネントに通知しますFileSystemWatcher。 短時間に多くの変更がある場合、バッファーがオーバーフローする可能性があります。 これにより、コンポーネントはディレクトリの変更を追跡しなくなります。また、一括通知のみが提供されます。 このプロパティを使用してバッファーのサイズを InternalBufferSize 増やすと、ディスクにスワップできない非ページ メモリが原因で発生するため、バッファーはファイル変更イベントを見逃さないほど小さいサイズに保たれます。 バッファー オーバーフローを回避するには、不要な変更通知を NotifyFilter フィルター処理できるように、プロパティと IncludeSubdirectories プロパティを使用します。

インスタンスの初期プロパティ値の FileSystemWatcher一覧については、コンストラクターを FileSystemWatcher 参照してください。

このクラスを使用する場合は、次の点に FileSystemWatcher 注意してください。

  • 隠しファイルは無視されません。

  • 一部のシステムでは、 FileSystemWatcher 短い 8.3 ファイル名形式を使用してファイルの変更を報告します。 たとえば、"LongFileName.LongExtension" への変更を "LongFil~" と報告できます。Lon".

  • このクラスには、リンク確認要求と、すべてのメンバーに適用されるクラス レベルの継承確認要求が含まれています。 直接の呼び出し元か派生クラスのいずれかに完全信頼アクセス許可がない場合、SecurityException がスローされます。 セキュリティ要求の詳細については、「リンク確認要求」を参照してください。

  • ネットワーク経由でディレクトリを監視するためにプロパティに InternalBufferSize 設定できる最大サイズは 64 KB です。

フォルダーのコピーと移動

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

フォルダーの内容が監視フォルダーに移動またはコピーされたことを通知するには、次の表に示すように、メソッドとOnRenamedイベント ハンドラー メソッドを指定OnChangedします。

イベント ハンドラー 処理されたイベント パフォーマンス
OnChanged ChangedCreatedDeleted ファイル属性、作成されたファイル、および削除されたファイルの変更を報告します。
OnRenamed Renamed 名前が変更されたファイルとフォルダーの古いパスと新しいパスを一覧表示し、必要に応じて再帰的に展開します。

イベントとバッファー サイズ

次の説明に従って、発生するファイル システム変更イベントに影響を与える要因がいくつかあります。

  • 一般的なファイル システム操作では、複数のイベントが発生する可能性があります。 たとえば、あるディレクトリから別のディレクトリにファイルを移動すると、いくつかのOnChangedディレクトリとOnDeletedイベントOnCreatedが発生することがあります。 ファイルの移動は、複数の単純な操作で構成され、複数のイベントを発生させる複雑な操作です。 同様に、一部のアプリケーション (ウイルス対策ソフトウェアなど) によって FileSystemWatcher検出される追加のファイル システム イベントが発生する可能性があります。

  • ディスクが FileSystemWatcher 切り替えまたは削除されていない限り、ディスクを監視できます。 タイムスタンプとプロパティを FileSystemWatcher 変更できないため、CD と DVD のイベントは発生しません。 リモート コンピューターには、コンポーネントが正常に機能するために必要なプラットフォームのいずれかがインストールされている必要があります。

バッファー サイズを FileSystemWatcher 超えると、イベントが見逃される可能性があることに注意してください。 イベントが見つからないことを回避するには、次のガイドラインに従います。

  • プロパティを設定してバッファー サイズを大きくします InternalBufferSize

  • 長いファイル名を持つファイルを監視することは避けてください。長いファイル名はバッファーを埋めるのに寄与するためです。 短い名前を使用してこれらのファイルの名前を変更することを検討してください。

  • イベント処理コードはできるだけ短くしてください。

コンストラクター

FileSystemWatcher()

FileSystemWatcher クラスの新しいインスタンスを初期化します。

FileSystemWatcher(String)

監視するディレクトリを指定して、FileSystemWatcher クラスの新しいインスタンスを初期化します。

FileSystemWatcher(String, String)

FileSystemWatcher クラスの新しいインスタンスを、監視するディレクトリとファイルの種類を指定して初期化します。

プロパティ

CanRaiseEvents

コンポーネントがイベントを発生させることがきるかどうかを示す値を取得します。

(継承元 Component)
Container

IContainer を含む Component を取得します。

(継承元 Component)
DesignMode

Component が現在デザイン モードかどうかを示す値を取得します。

(継承元 Component)
EnableRaisingEvents

コンポーネントが有効かどうかを示す値を取得または設定します。

Events

Component に結び付けられているイベント ハンドラーのリストを取得します。

(継承元 Component)
Filter

ディレクトリで監視するファイルを決定するために使用するフィルター文字列を取得または設定します。

Filters

ディレクトリ内で監視するファイルを決定するために、使用されているすべてのフィルターのコレクションを取得します。

IncludeSubdirectories

指定したパスのサブディレクトリを監視するかどうかを示す値を取得または設定します。

InternalBufferSize

内部バッファーのサイズ (バイト単位) を取得または設定します。

NotifyFilter

ウォッチする変更の種類を取得または設定します。

Path

ウォッチするディレクトリのパスを取得または設定します。

Site

ISiteFileSystemWatcher を取得または設定します。

SynchronizingObject

ディレクトリ変更の結果として発行されるイベント ハンドラー呼び出しをマーシャリングするために使用するオブジェクトを取得または設定します。

メソッド

BeginInit()

フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を開始します。 初期化は実行時に発生します。

CreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。

(継承元 MarshalByRefObject)
Dispose()

FileSystemWatcher で使用されるアンマネージ リソースを解放します。

Dispose()

Component によって使用されているすべてのリソースを解放します。

(継承元 Component)
Dispose(Boolean)

FileSystemWatcher によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

EndInit()

フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を終了します。 初期化は実行時に発生します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
Finalize()

現在のインスタンスに保持されているリソースを解放します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetLifetimeService()
互換性のために残されています。

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。

(継承元 MarshalByRefObject)
GetService(Type)

Component またはその Container で提供されるサービスを表すオブジェクトを返します。

(継承元 Component)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
InitializeLifetimeService()
互換性のために残されています。

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。

(継承元 MarshalByRefObject)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
MemberwiseClone(Boolean)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。

(継承元 MarshalByRefObject)
OnChanged(FileSystemEventArgs)

Changed イベントを発生させます。

OnCreated(FileSystemEventArgs)

Created イベントを発生させます。

OnDeleted(FileSystemEventArgs)

Deleted イベントを発生させます。

OnError(ErrorEventArgs)

Error イベントを発生させます。

OnRenamed(RenamedEventArgs)

Renamed イベントを発生させます。

ToString()

Component の名前 (存在する場合) を格納する String を返します。 このメソッドはオーバーライドできません。

(継承元 Component)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
WaitForChanged(WatcherChangeTypes)

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

WaitForChanged(WatcherChangeTypes, Int32)

監視する変更の種類とタイムアウトまでの待機時間 (ミリ秒単位) を指定して、発生した変更についての固有な情報を格納する構造体を返す同期メソッド。

イベント

Changed

指定した Path のファイルまたはディレクトリが変更されたときに発生します。

Created

指定した Path のファイルまたはディレクトリが作成されたときに発生します。

Deleted

指定した Path のファイルまたはディレクトリが削除されたときに発生します。

Disposed

Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。

(継承元 Component)
Error

FileSystemWatcher のインスタンスが変更の監視を続けられない場合、または内部バッファー オーバーフローの場合に発生します。

Renamed

指定した Path のファイルまたはディレクトリの名前が変更されたときに発生します。

適用対象

こちらもご覧ください