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" に設定し * ます。

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

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

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

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

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

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

  • システムによっては、 FileSystemWatcher 短い8.3 ファイル名形式を使用してファイルが変更されることがあります。 たとえば、"LongFileName. Longfilename" への変更は、"LongFil ~ として報告される可能性があります。Lon "。

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

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

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

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

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

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

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

次に示すように、いくつかの要因によって、発生するファイルシステム変更イベントが影響を受ける場合があることに注意してください。

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

適用対象

こちらもご覧ください