C #에서 FileSystemWatcher로 작업하는 방법

System.IO 네임 스페이스의 FileSystemWatcher 클래스를 사용하여 파일 시스템의 변경 사항을 모니터링 할 수 있습니다. 시스템의 파일 또는 디렉토리에서 변경 사항을 감시하고 변경 사항이 발생하면 이벤트를 트리거합니다.

FileSystemWatcher가 작동하려면 모니터링해야하는 디렉토리를 지정해야합니다. FileSystemWatcher는 모니터링중인 디렉토리가 변경되면 다음 이벤트를 발생시킵니다.

  • 변경됨 :이 이벤트는 모니터링중인 경로의 파일 또는 디렉터리가 변경 될 때 트리거됩니다.
  • 생성됨 :이 이벤트는 모니터링중인 경로의 파일 또는 디렉터리가 생성 될 때 트리거됩니다.
  • 삭제됨 :이 이벤트는 모니터링중인 경로의 파일 또는 디렉토리가 삭제 될 때 트리거됩니다.
  • 오류 :이 이벤트는 모니터링되는 경로의 변경으로 인해 오류가 발생하여 트리거됩니다.
  • 이름 변경됨 :이 이벤트는 모니터링중인 경로에있는 파일 또는 디렉토리의 이름이 변경 될 때 트리거됩니다.

C #에서 간단한 파일 시스템 감시자 만들기

일반적인 파일 시스템 감시자가 어떻게 작동하는지 보여주기 위해 Visual Studio에서 새 콘솔 응용 프로그램 프로젝트를 만들어 보겠습니다. FileSystemWatcher 클래스를 사용하는 더 좋은 방법은 Windows 서비스를 사용하는 것입니다. FileSystemWatcher 클래스를 사용하고 감시중인 경로가 변경 될 때 알림을 보내는 Windows 서비스를 빌드 할 수 있습니다.

어쨌든 이제 약간의 코드를 살펴 보겠습니다. Program.cs 파일의 Main 메서드에서 다음 코드를 작성합니다.

static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

다음 코드 조각은 MonitorDirectory 메서드의 모양을 보여줍니다. 이 메서드는 특정 디렉터리를 모니터링하고 변경이 발생할 때마다 이벤트를 발생시키는 데 사용됩니다. 디렉토리 경로는 메소드에 인수로 전달됩니다.

private static void MonitorDirectory(string path)

        {

            FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

            fileSystemWatcher.Path = path;

            fileSystemWatcher.Created += FileSystemWatcher_Created;

            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

            fileSystemWatcher.EnableRaisingEvents = true;

        }

이벤트가 선언되는 방법과 파일 시스템 감시자 개체의 EnableRaisingEvents 속성이 true로 설정되어 모니터링되는 경로가 변경 될 때 이벤트를 발생시킬 수 있습니다. 본질적으로 이것은 실제 모니터링을 시작합니다. FileSystemWatcher에 경로 모니터링을 시작하고 이후에 적절한 이벤트를 발생 시키도록 알립니다.

선언 한 각 이벤트에 대해 이벤트가 트리거 될 때 실행되는 각각의 이벤트 핸들러가 있어야합니다. 다음은 모니터링되는 디렉터리가 변경 될 때 트리거되는 이벤트 처리기의 소스 코드입니다.

 private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File created: {0}", e.Name);

        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File renamed: {0}", e.Name);

        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File deleted: {0}", e.Name);

        }

여기에 참조 용 전체 소스 코드가 있습니다.

using System;

using System.IO;

namespace FileSystemWatcher

{

    class Program

    {

        static void Main(string[] args)

        {

            string path = @"D:\";

            MonitorDirectory(path);

            Console.ReadKey();

        }

        private static void MonitorDirectory(string path)

        {

            FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

            fileSystemWatcher.Path = path;

            fileSystemWatcher.Created += FileSystemWatcher_Created;

            fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

            fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

            fileSystemWatcher.EnableRaisingEvents = true;

        }

        private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File created: {0}", e.Name);

        }

        private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File renamed: {0}", e.Name);

        }

        private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)

        {

            Console.WriteLine("File deleted: {0}", e.Name);

        }

    }

}

이름이 지정된 디렉토리가 시스템의 D : \> 드라이브에서 사용 가능하다고 가정하고 콘솔 응용 프로그램을 실행 한 다음 디렉토리에 새 파일을 만듭니다. 새로 생성 된 파일의 이름이 콘솔 창에 표시되는 것을 볼 수 있습니다. 이는 모니터링중인 디렉터리 (이 예에서는 D : \)에 새 파일이 생성되는 즉시 FileSystemWatcher_Created 이벤트가 트리거되기 때문입니다.