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 を値の 1 つに設定 NotifyFilters します。 監視できる変更の種類の詳細については、「」を参照してください NotifyFilters

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

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

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

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

  • 非表示ファイルは無視されません。

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

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

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

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

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

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

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

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

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

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

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

バッファー サイズを 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 のファイルまたはディレクトリの名前が変更されたときに発生します。

適用対象

こちらもご覧ください