FileSystemWatcher 클래스

정의

디렉터리 또는 디렉터리의 파일이 변경되면 파일 시스템 변경 알림을 수신 대기하고 이벤트를 발생합니다.

public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
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
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
type FileSystemWatcher = class
    interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
상속
FileSystemWatcher
상속
FileSystemWatcher
특성
구현

예제

다음 예제에서는 런타임에 지정된 디렉터리를 감시하는 방법을 만듭니다 FileSystemWatcher . 구성 요소는 디렉터리에서 LastWriteLastAccess 텍스트 파일의 생성, 삭제 또는 이름 바꾸기 및 시간 변경 내용을 감시하도록 설정됩니다. 파일이 변경, 생성 또는 삭제되면 파일 경로가 콘솔에 출력됩니다. 파일 이름을 바꾸면 이전 경로와 새 경로가 콘솔에 출력됩니다.

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.LongExtension"의 변경 내용은 "LongFil~.Lon"으로 보고될 수 있습니다.
  • 네트워크를 통해 디렉터리를 모니터링하기 위해 InternalBufferSize 속성에 설정할 수 있는 최대 크기는 64KB입니다.

폴더 복사 및 이동

운영 체제 및 FileSystemWatcher 개체는 잘라내기 및 붙여넣기 작업 또는 이동 동작을 폴더 및 해당 내용에 대한 이름 바꾸기 동작으로 해석합니다. 파일이 있는 폴더를 잘라내어 감시 FileSystemWatcher 중인 폴더에 붙여넣으면 개체는 폴더만 새 폴더로 보고하지만 기본적으로 이름이 바뀌기 때문에 해당 내용이 보고되지 않습니다.

폴더의 내용이 감시된 폴더로 이동되거나 복사되었음을 알리려면 다음 표에 설명된 대로 이벤트 처리기 메서드를 제공합니다 OnChangedOnRenamed .

이벤트 처리기 처리된 이벤트 수행
OnChanged Changed, , CreatedDeleted 파일 특성, 만든 파일 및 삭제된 파일의 변경 내용을 보고합니다.
OnRenamed Renamed 이름이 바뀐 파일 및 폴더의 이전 경로와 새 경로를 나열하고 필요한 경우 재귀적으로 확장합니다.

이벤트 및 버퍼 크기

다음과 같이 발생하는 파일 시스템 변경 이벤트에는 몇 가지 요인이 영향을 줄 수 있습니다.

  • 일반적인 파일 시스템 작업으로 두 개 이상의 이벤트가 발생할 수 있습니다. 예를 들어, 파일이 한 디렉터리에서 다른 디렉터리로 이동되면, 여러 OnChanged 이벤트와 일부 OnCreatedOnDeleted 이벤트가 발생할 수 있습니다. 파일 이동은 여러 개의 간단한 작업으로 구성된 복잡한 작업이므로 여러 이벤트가 발생합니다. 마찬가지로 일부 애플리케이션(예: 바이러스 백신 소프트웨어)은 FileSystemWatcher에 의해 감지되는 추가 파일 시스템 이벤트를 발생시킬 수 있습니다.
  • FileSystemWatcher는 디스크가 전환되거나 제거되지 않는 한 디스크를 감시할 수 있습니다. FileSystemWatcher 타임스탬프를 변경하고 속성을 변경할 수 없으므로 CD 및 DVD에 대한 이벤트를 발생시키지 않습니다. 구성 요소가 제대로 작동하려면 원격 컴퓨터에 필요한 플랫폼 중 하나가 설치되어 있어야 합니다.

FileSystemWatcher 버퍼 크기를 초과하면 이벤트가 누락될 수 있습니다. 이벤트 누락을 방지하려면 다음 지침을 따르세요.

  • 속성을 설정하여 버퍼 크기를 늘입니다 InternalBufferSize .
  • 파일 이름이 긴 파일을 피하세요. 긴 파일 이름은 버퍼를 가득 채울 수 있습니다. 더 짧은 이름을 사용하여 이러한 파일의 이름을 바꾸는 것이 좋습니다.
  • 이벤트 처리 코드를 최대한 짧게 유지합니다.

생성자

Name Description
FileSystemWatcher()

FileSystemWatcher 클래스의 새 인스턴스를 초기화합니다.

FileSystemWatcher(String, String)

모니터링할 지정된 디렉터리 및 파일 형식이 FileSystemWatcher 지정된 경우 클래스의 새 인스턴스를 초기화합니다.

FileSystemWatcher(String)

모니터링할 지정된 디렉터리가 지정된 경우 클래스의 FileSystemWatcher 새 인스턴스를 초기화합니다.

속성

Name Description
CanRaiseEvents

구성 요소가 이벤트를 발생시키는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 Component)
Container

IContainer 포함하는 값을 가져옵니다 Component.

(다음에서 상속됨 Component)
DesignMode

현재 디자인 모드인지 여부를 Component 나타내는 값을 가져옵니다.

(다음에서 상속됨 Component)
EnableRaisingEvents

구성 요소를 사용할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다.

Events

Component에 연결된 이벤트 처리기 목록을 가져옵니다.

(다음에서 상속됨 Component)
Filter

디렉터리에서 모니터링되는 파일을 결정하는 데 사용되는 필터 문자열을 가져오거나 설정합니다.

Filters

디렉터리에서 모니터링되는 파일을 결정하는 데 사용되는 모든 필터의 컬렉션을 가져옵니다.

IncludeSubdirectories

지정된 경로 내의 하위 디렉터리를 모니터링해야 하는지 여부를 나타내는 값을 가져오거나 설정합니다.

InternalBufferSize

내부 버퍼의 크기(바이트)를 가져오거나 설정합니다.

NotifyFilter

감시할 변경 형식을 가져오거나 설정합니다.

Path

감시할 디렉터리의 경로를 가져오거나 설정합니다.

Site

에 대한 ISite값을 FileSystemWatcher 가져오거나 설정합니다.

SynchronizingObject

디렉터리 변경의 결과로 발급된 이벤트 처리기 호출을 마샬링하는 데 사용되는 개체를 가져오거나 설정합니다.

메서드

Name Description
BeginInit()

폼에서 사용되거나 다른 구성 요소에서 사용되는 초기화를 FileSystemWatcher 시작합니다. 초기화는 런타임에 발생합니다.

CreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시를 생성하는 데 필요한 모든 관련 정보를 포함하는 개체를 만듭니다.

(다음에서 상속됨 MarshalByRefObject)
Dispose()

에서 사용하는 FileSystemWatcher관리되지 않는 리소스를 해제합니다.

Dispose()

에서 사용하는 모든 리소스를 Component해제합니다.

(다음에서 상속됨 Component)
Dispose(Boolean)

관리되지 않는 리소스를 FileSystemWatcher 해제하고 관리되는 리소스를 선택적으로 해제합니다.

EndInit()

폼에서 사용되거나 다른 구성 요소에서 사용되는 초기화를 FileSystemWatcher 종료합니다. 초기화는 런타임에 발생합니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 여부를 확인합니다.

(다음에서 상속됨 Object)
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()

String(있는 경우)의 Component이름을 포함하는 값을 반환합니다. 이 메서드는 재정의해서는 안 됩니다.

(다음에서 상속됨 Component)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)
WaitForChanged(WatcherChangeTypes, Int32)

모니터링하려는 변경 유형과 시간 초과 전에 대기할 시간(밀리초)을 감안할 때 발생한 변경 내용에 대한 특정 정보가 포함된 구조를 반환하는 동기 메서드입니다.

WaitForChanged(WatcherChangeTypes, TimeSpan)

모니터링할 변경 유형이 지정된 경우 발생한 변경 내용에 대한 특정 정보가 포함된 구조를 동기적으로 반환합니다.

WaitForChanged(WatcherChangeTypes)

모니터링하려는 변경 유형에 따라 발생한 변경 내용에 대한 특정 정보가 포함된 구조를 반환하는 동기 메서드입니다.

이벤트

Name Description
Changed

지정된 Path 파일 또는 디렉터리가 변경될 때 발생합니다.

Created

지정된 Path 파일 또는 디렉터리를 만들 때 발생합니다.

Deleted

지정된 Path 파일 또는 디렉터리가 삭제될 때 발생합니다.

Disposed

구성 요소가 메서드 호출에 Dispose() 의해 삭제될 때 발생합니다.

(다음에서 상속됨 Component)
Error

인스턴스 FileSystemWatcher 가 변경 내용을 계속 모니터링할 수 없거나 내부 버퍼가 오버플로되는 경우에 발생합니다.

Renamed

지정된 Path 파일 또는 디렉터리의 이름을 바꿀 때 발생합니다.

적용 대상

추가 정보