내보내기(0) 인쇄
모두 확장

FileSystemWatcher 클래스

업데이트: 2007년 11월

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

네임스페이스:  System.IO
어셈블리:  System(System.dll)

[IODescriptionAttribute("FileSystemWatcherDesc")]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class FileSystemWatcher : Component, 
	ISupportInitialize
/** @attribute IODescriptionAttribute("FileSystemWatcherDesc") */
/** @attribute PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust") */
/** @attribute PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust") */
public class FileSystemWatcher extends Component implements ISupportInitialize
public class FileSystemWatcher extends Component implements ISupportInitialize

FileSystemWatcher를 사용하여 지정된 디렉터리의 변경 내용을 조사합니다. 지정된 디렉터리에 있는 하위 디렉터리 및 파일의 변경 내용을 조사할 수 있습니다. 로컬 컴퓨터, 네트워크 드라이브, 또는 원격 컴퓨터에 있는 파일을 조사하기 위한 구성 요소를 만들 수 있습니다.

모든 파일의 변경 내용을 조사하려면 Filter 속성을 빈 문자열("")로 설정하거나 와일드카드("*.*")를 사용합니다. 특정 파일을 조사하려면 Filter 속성을 파일 이름으로 설정합니다. 예를 들어, MyDoc.txt 파일의 변경 내용을 조사하려면 Filter 속성을 "MyDoc.txt"로 설정합니다. 특정 형식의 파일에 대한 변경 내용을 조사할 수도 있습니다. 예를 들어, 텍스트 파일의 변경 내용을 조사하려면 Filter 속성을 "*.txt"로 설정합니다.

디렉터리나 파일에 대해 여러 형식의 변경 내용을 조사할 수 있습니다. 예를 들어, Attributes, LastWrite 날짜 및 시간, 또는 파일이나 디렉터리 Size의 변경 내용을 조사할 수 있습니다. NotifyFilter 속성을 NotifyFilters 값 중 하나로 설정하면 이를 수행할 수 있습니다. 조사할 수 있는 변경 내용의 형식에 대한 자세한 내용은 NotifyFilters를 참조하십시오.

파일이나 디렉터리의 이름 바꾸기, 삭제, 또는 만들기를 조사할 수 있습니다. 예를 들어, 텍스트 파일의 이름 바꾸기를 조사하려면 Filter 속성을 "*.txt"로 설정하고, 매개 변수에 Renamed를 지정하여 WaitForChanged 메서드를 호출합니다.

Windows 운영 체제에서는 FileSystemWatcher에서 만든 버퍼에 저장된 파일 변경 내용을 구성 요소에 알립니다. 짧은 시간에 변경 내용이 많은 경우 버퍼가 오버플로될 수 있습니다. 이로 인해 구성 요소는 디렉터리 변경을 추적하지 않게 되며 빈 알림만 제공하게 됩니다. 버퍼는 디스크에 스왑할 수 없는 페이징되지 않은 메모리를 사용하므로 InternalBufferSize 속성을 사용하여 버퍼 크기를 늘리면 리소스가 많이 소모됩니다. 따라서 버퍼는 파일 변경 이벤트를 잃지 않을 범위 내에서 가능한 한 작게 유지하는 것이 좋습니다. 버퍼 오버플로를 방지하려면 NotifyFilterIncludeSubdirectories 속성을 사용하여 원하지 않는 변경 알림을 필터링합니다.

FileSystemWatcher 인스턴스의 초기 속성 값 목록을 보려면 FileSystemWatcher 생성자를 참조하십시오.

FileSystemWatcher 클래스를 사용할 경우 다음 사항에 주의하십시오.

  • 숨김 파일도 조사됩니다.

  • 일부 시스템에서 FileSystemWatcher는 8.3 형식의 약식 파일 이름을 사용하여 파일 변경 내용을 보고합니다. 예를 들어, "LongFileName.LongExtension"에 대한 변경 내용은 "LongFi~.Lon"으로 보고될 수 있습니다.

  • 이 클래스에는 모든 멤버에 적용되는 클래스 수준의 링크 요청과 상속 요청이 포함되어 있습니다. 직접 실행 호출자나 파생 클래스에 완전 신뢰 권한이 없으면 SecurityException이 throw됩니다. 보안 요청에 대한 자세한 내용은 링크 요청을 참조하십시오.

폴더 복사 및 이동

운영 체제와 FileSystemWatcher 개체에서는 잘라내기 및 붙여넣기 작업이나 이동 작업을 폴더와 해당 내용에 대한 이름 바꾸기 작업으로 해석합니다. 파일이 있는 폴더를 잘라내어 조사할 폴더에 붙여넣으면 FileSystemWatcher 개체에서는 해당 폴더만 새 항목으로 보고하고 폴더 내용은 기본적으로 이름이 바뀐 것으로 해석하므로 새 항목으로 보고하지 않습니다.

폴더 내용이 조사되는 폴더로 이동되거나 복사되었음을 알리는 알림을 받으려면 다음 표에서와 같이 OnChangedOnRenamed 이벤트 처리기 메서드를 제공합니다.

이벤트 처리기

처리되는 이벤트

수행 작업

OnChanged

Changed, Created, Deleted

파일 특성의 변경 내용, 만든 파일 및 삭제된 파일을 보고합니다.

OnRenamed

Renamed

이름이 바뀐 파일과 폴더의 이전 경로와 새 경로를 나열합니다(필요한 경우 재귀적으로 확장).

이벤트 및 버퍼 크기

어떤 파일 시스템 변경 이벤트가 발생할지는 다음에 설명하는 것과 같은 몇 가지 요소에 따라 달라집니다.

  • 공용 파일 시스템 작업은 여러 이벤트를 발생시킬 수 있습니다. 예를 들어, 파일이 한 디렉터리에서 다른 디렉터리로 이동될 경우 여러 개의 OnChanged 및 몇몇 OnCreatedOnDeleted 이벤트가 발생할 수 있습니다. 파일 이동 작업은 여러 개의 간단한 작업으로 구성된 복합 작업이기 때문에 여러 이벤트를 발생시킵니다. 마찬가지로, 바이러스 백신 소프트웨어와 같은 일부 응용 프로그램은 FileSystemWatcher에서 감지하는 추가 파일 시스템 이벤트를 발생시킬 수 있습니다.

  • FileSystemWatcher에서는 전환되거나 제거되지 않은 디스크도 조사할 수 있습니다. 타임스탬프 및 속성은 변경될 수 없으므로 FileSystemWatcher는 CD와 DVD에 대한 이벤트는 발생시키지 않습니다. 구성 요소가 올바르게 작동하려면 원격 컴퓨터에 필요한 플랫폼 중 하나가 설치되어 있어야 합니다.

  • Windows XP 서비스 팩 1 이하나 Windows 2000 SP2 이하에서 여러 FileSystemWatcher 개체가 동일한 UNC 경로를 조사할 경우 이러한 개체 중 하나만 이벤트를 발생시킵니다. Windows XP SP1 이상, Windows 2000 SP3 이상 또는 Windows Server 2003을 실행하는 컴퓨터에서는 모든 FileSystemWatcher 개체가 해당 이벤트를 발생시킵니다.

  • Filter를 설정해도 버퍼로 들어가는 항목이 줄어들지는 않습니다.

Windows 운영 체제에 대한 종속성으로 인해 FileSystemWatcher는 이벤트가 손실되거나 버퍼 크기가 초과되어도 Error 이벤트를 발생시키지 않습니다. 이벤트 손실을 방지하려면 다음 지침을 따릅니다.

  • InternalBufferSize 속성을 사용하여 버퍼 크기를 늘리면 파일 시스템 변경 이벤트가 손실되지 않도록 할 수 있습니다.

  • 긴 파일 이름으로 파일을 조사하지 않습니다. 보다 짧은 이름으로 이름을 바꾸는 것이 좋습니다.

  • 이벤트 처리 코드를 가능한 한 짧게 유지합니다.

다음 예제에서는 런타임에 지정된 디렉터리를 조사하는 FileSystemWatcher를 만듭니다. 구성 요소는 디렉터리에 있는 텍스트 파일의 LastWriteLastAccess 시간 변경, 작성, 삭제 또는 이름 변경을 조사하도록 설정됩니다. 파일이 변경, 작성 또는 삭제되면 해당 파일의 경로가 콘솔에 출력됩니다. 파일 이름이 변경되면 콘솔에 이전 경로와 새 경로가 출력됩니다.

이 예제에서는 System.DiagnosticsSystem.IO 네임스페이스를 사용합니다.

public class Watcher
{

    public static void Main()
    {
    Run();

    }

    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    public static void Run()
    {
        string[] args = System.Environment.GetCommandLineArgs();

        // If a directory is not specified, exit program.
        if(args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = args[1];
        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }
}



public class Watcher
{
    public static void main(String[] args1)
    {
	Run();
    } 

    /** @attribute PermissionSet(SecurityAction.Demand, Name="FullTrust")
     */
    public static void Run()
    {
        String args[] = System.Environment.GetCommandLineArgs();

        // If a directory is not specified, exit program.
        if (args.length != 2) {

            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.set_Path(args[1]);

        /* Watch for changes in LastAccess and LastWrite times, and 
           the renaming of files or directories.
         */
        watcher.set_NotifyFilter
            (NotifyFilters.LastAccess |NotifyFilters.LastWrite |
            NotifyFilters.FileName | NotifyFilters.DirectoryName);

        // Only watch text files.
        watcher.set_Filter("*.txt");

        // Add event handlers.
        watcher.add_Changed(new FileSystemEventHandler(OnChanged));
        watcher.add_Created(new FileSystemEventHandler(OnChanged));
        watcher.add_Deleted(new FileSystemEventHandler(OnChanged));
        watcher.add_Renamed(new RenamedEventHandler(OnRenamed));

        // Begin watching.
        watcher.set_EnableRaisingEvents(true);

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while ((Console.Read() != 'q')) {

        }
    }

    // Define the event handlers.
    private static void OnChanged(Object source,FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
        Console.WriteLine(("File: " + e.get_FullPath() + " " 
            + e.get_ChangeType()));
    } //OnChanged

    private static void OnRenamed(Object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}",
            e.get_OldFullPath(),e.get_FullPath());
    } //OnRenamed
} //Watcher


이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0, 1.1, 1.0에서 지원

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft