방법: FileSystemWatcher 구성 요소 인스턴스 구성

업데이트: 2007년 11월

FileSystemWatcher 구성 요소 인스턴스의 동작 방식을 결정하는 여러 속성을 설정할 수 있습니다. 이들 속성은 구성 요소 인스턴스에서 모니터링할 디렉터리와 하위 디렉터리 및 이 디렉터리에서 이벤트를 발생시키는 정확한 상황을 결정합니다.

감시할 디렉터리 지정

다음 두 가지 속성, 즉 PathIncludeSubdirectories를 사용하여 FileSystemWatcher 구성 요소가 감시할 디렉터리를 결정합니다.

감시할 루트 디렉터리의 정규화된 경로를 지정하려면

  • 다음 코드와 같이 기존 구성 요소 인스턴스에서 Path 속성을 설정합니다.

    Dim MyWatcher As New System.IO.FileSystemWatcher()
    MyWatcher.Path = "c:\"
    
         System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            MyWatcher.Path = "c:\\";
    

    이 설정에는 표준 디렉터리 경로 형식(c:\directory)이나 UNC 형식(\\server\directory)을 사용할 수 있습니다.

IncludeSubdirectories 속성은 루트 디렉터리에 있는 하위 디렉터리를 모니터링할지 여부를 나타냅니다. 이 속성이 true로 설정된 경우 구성 요소에서는 주 디렉터리에서와 마찬가지로 하위 디렉터리의 변경 내용을 감시합니다.

감시할 변경 내용 지정

감시할 디렉터리와 하위 디렉터리를 지정하는 것은 물론 감시하려는 특정 파일과 변경 형식을 지정할 수도 있습니다. 부분적으로 관심있는 이벤트에 대해서만 처리기를 정의하여 감시할 변경 내용을 결정합니다. 예를 들어, 파일이 만들어질 때만 통보 받고 싶은 경우 Created 이벤트만 처리하면 됩니다. 그러나 구성 요소의 동작을 더 세밀하게 제한하는 일련의 속성을 설정할 수도 있습니다.

Filter 속성을 사용하면 구성 요소에서 루트 디렉터리의 특정 파일이나 디렉터리만 감시하도록 제한하는 특정 파일 또는 와일드카드 일치 패턴을 지정할 수 있습니다. 예를 들어, 루트에서 텍스트 파일이 만들어지는 것을 감시하려면 Filter 속성을 "*.txt"로 설정한 다음 Created 이벤트의 처리기를 만들면 됩니다. 유효한 모든 파일 확장명을 포함하여 임의의 값으로 필터를 설정할 수 있습니다. 기본값 "*.*"는 모든 파일을 반환하며 ""(빈 문자열)도 모든 파일이나 디렉터리를 반환합니다. 그러나 한 번에 하나의 필터 문자열만 설정할 수 있습니다. 필요한 경우 FileSystemWatcher를 시작한 후 필터를 변경하여 이벤트를 받을 수 있습니다.

참고:

FileSystemWatcher 구성 요소는 디렉터리의 특성 자체에 대한 변경 내용이 아니라 디렉터리 안의 변경 내용을 감시하도록 설계되었습니다. 예를 들어, c:\MyProjects라는 디렉터리를 감시하는 경우 구성 요소에서는 디렉터리 안의 변경 내용은 모니터링하지만 디렉터리 자체에 대한 변경 내용은 모니터링하지 않습니다.

NotifyFilter 속성을 사용하면 감시하려는 변경 내용을 좀 더 세밀하게 제한할 수 있습니다. 디렉터리 이름, 파일 이름 또는 이 두 가지 모두에 대한 변경 내용을 감시하도록 NotifyFilter 속성을 설정할 수 있습니다. 또한 NotifyFilter 속성에는 Changed 이벤트를 제한하는 일련의 값이 들어 있습니다. Changed 이벤트는 요청한 파일이 변경될 때마다 이벤트를 발생시키므로 많은 이벤트를 발생시킬 수 있습니다. 실제로 파일 복사 및 이동과 같은 일부 표준 작업에서는 파일 크기, 마지막 수정 시간, 마지막 액세스 시간 등과 같은 다양한 특성이 변경되므로 파일 변경 이벤트가 여러 번 발생합니다.

NotifyFilter 속성은 구성 요소 인스턴스에서 이벤트를 발생시키는 파일이나 디렉터리의 변경 내용 개수를 제한합니다. 파일이나 디렉터리의 이름이 변경되거나, 주 디렉터리의 항목 특성이 변경되거나, 파일 크기가 변경되거나, 마지막 수정 시간 또는 마지막 액세스 시간이 변경되거나, 파일이나 디렉터리에 대한 보안 액세스 권한이 변경되는 경우에만 이벤트를 발생시키도록 구성 요소를 설정할 수 있습니다. 이 값들은 모두 NotifyFilters 열거형의 일부입니다. 아래 예제에서 볼 수 있는 것처럼 BitOr(Visual Basic의 경우) 또는 |(Visual C#의 경우) 연산자를 사용하면 감시할 변경 내용을 여러 개 설정할 수 있습니다.

참고:

FileSystemWatcher 구성 요소가 변경 내용 모니터링을 시작하도록 하려면 EnableRaisingEvents 속성을 true로 설정해야 합니다.

FileSystemWatcher 구성 요소의 인스턴스를 구성하려면

  1. FileSystemWatcher 구성 요소의 인스턴스를 만듭니다. 자세한 내용은 방법: FileSystemWatcher 구성 요소 인스턴스 만들기를 참조하십시오.

  2. Path 속성을 감시할 루트 디렉터리의 정규화된 경로로 설정합니다.

    팁:

    이 속성은 표준 파일 경로나 UNC 경로로 입력할 수 있습니다.

  3. 인스턴스의 모든 선택 속성을 설정합니다.

    시나리오

    속성

    루트 내의 특정 파일이나 하위 디렉터리의 이름에 대한 변경 내용을 감시할 경우

    Filter

    인스턴스의 모니터링 동작을 제한하는 와일드카드 필터 식

    루트 디렉터리에 있는 모든 하위 디렉터리의 변경 내용을 감시할 경우

    IncludeSubdirectories

    true 또는 false

    Changed, Renamed, Deleted 또는 Created 이벤트를 처리할 때 파일 또는 하위 디렉터리의 특정 변경 내용만 감시할 경우

    NotifyFilter

    NotifyFilters 열거형에 사용할 수 있는 모든 값

  4. EnableRaisingEvents 속성을 true로 설정하면 구성 요소 인스턴스를 사용할 수 있습니다.

    예를 들어, "reports"라는 드롭 디렉터리에서 새 .txt 파일이 만들어지는지 감시하는 FileSystemWatcher 인스턴스를 만든다고 가정합니다. 또한 데이터가 변경될 때 동적으로 재실행되는 기존 보고서의 변경 내용을 모니터링하려고 합니다. 다음과 같이 구성 요소를 설정할 수 있습니다.

    ' This needs to be declared in a place where it will not go out of scope.
    ' For example, it would be a class variable in a form class.
    Dim MyWatcher As New System.IO.FileSystemWatcher()
    ' This code would go in one of the initialization methods of the class.
    MyWatcher.Path = "c:\"
    ' Watch only for changes to *.txt files.
    MyWatcher.Filter = "*.txt"
    MyWatcher.IncludeSubdirectories = False
    ' Filter for Last Write changes.
    MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite
    ' Example of watching more than one type of change.
    MyWatcher.NotifyFilter = _
       System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size
    ' Enable the component to begin watching for changes.
    MyWatcher.EnableRaisingEvents = True
    
         // This needs to be declared in a place where it will not go out of scope.
            // For example, it would be a class variable in a form class.
            System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            // This code would go in one of the initialization methods of the class.
            MyWatcher.Path = "c:\\";
            // Watch only for changes to *.txt files.
            MyWatcher.Filter = "*.txt";
            MyWatcher.IncludeSubdirectories = false;
            // Enable the component to begin watching for changes.
            MyWatcher.EnableRaisingEvents = true;
            // Filter for Last Write changes.
            MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
            // Example of watching more than one type of change.
            MyWatcher.NotifyFilter =
               System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
    

참고 항목

작업

방법: FileSystemWatcher 구성 요소 인스턴스 만들기

개념

파일 시스템 이벤트 모니터링 소개