본문 바로가기

C#

C#으로 파일 시스템 감시 프로그램 만들기

반응형

C#으로 파일 시스템 감시 프로그램을 만드는 과정을 블로그로 작성해보겠습니다. 이 프로그램은 지정된 디렉터리에서 파일 생성, 삭제, 변경 등의 이벤트를 실시간으로 감지하고, 그 내용을 콘솔에 출력합니다.

1. 개요

파일 시스템 감시 프로그램은 특정 디렉터리에서 발생하는 파일 및 디렉터리의 변화를 실시간으로 감시할 수 있습니다. 예를 들어, 로그 파일을 모니터링하거나, 특정 폴더에 파일이 추가되는 것을 추적할 때 유용합니다. 이번 블로그에서는 C#의 FileSystemWatcher 클래스를 사용하여 이 기능을 구현하는 방법을 알아보겠습니다.

2. 프로젝트 설정

Visual Studio에서 새 콘솔 애플리케이션 프로젝트를 생성합니다. 이 프로그램에서는 System.IO 네임스페이스의 FileSystemWatcher 클래스를 사용합니다.

3. FileSystemWatcher 설정하기

먼저 FileSystemWatcher를 초기화하고, 감시할 디렉터리와 이벤트를 설정하는 방법을 알아보겠습니다.

3.1 FileSystemWatcher 인스턴스 생성

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 감시할 디렉터리 경로 설정
        string pathToWatch = @"C:\ExampleFolder";

        // FileSystemWatcher 인스턴스 생성
        FileSystemWatcher watcher = new FileSystemWatcher();
        
        // 감시할 디렉터리 설정
        watcher.Path = pathToWatch;

        // 감시할 이벤트 설정
        watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite;

        // 모든 파일을 감시 대상으로 설정
        watcher.Filter = "*.*";
    }
}

4. 이벤트 핸들러 작성하기

파일 시스템에서 발생하는 이벤트에 반응할 수 있도록 이벤트 핸들러를 작성합니다.

4.1 파일 생성, 변경, 삭제 이벤트 핸들러

// 파일이 생성될 때 실행되는 이벤트 핸들러
watcher.Created += OnChanged;
// 파일이 변경될 때 실행되는 이벤트 핸들러
watcher.Changed += OnChanged;
// 파일이 삭제될 때 실행되는 이벤트 핸들러
watcher.Deleted += OnChanged;
// 파일 이름이 변경될 때 실행되는 이벤트 핸들러
watcher.Renamed += OnRenamed;

// 이벤트 핸들러 메서드 정의
private static void OnChanged(object sender, FileSystemEventArgs e)
{
    Console.WriteLine($"파일 {e.ChangeType}: {e.FullPath}");
}

// 파일 이름이 변경될 때 실행되는 이벤트 핸들러 메서드 정의
private static void OnRenamed(object sender, RenamedEventArgs e)
{
    Console.WriteLine($"파일 이름 변경: {e.OldFullPath} -> {e.FullPath}");
}

5. 감시 시작 및 종료 설정

이제 FileSystemWatcher를 시작하고 프로그램이 종료될 때 감시를 중지하도록 설정합니다.

5.1 감시 시작

    // 감시 시작
    watcher.EnableRaisingEvents = true;

    Console.WriteLine($"'{pathToWatch}' 디렉터리를 감시합니다. 'q'를 눌러 종료하세요.");
    
    // 프로그램 종료를 위한 루프
    while (Console.Read() != 'q') ;
}

6. 프로그램 실행

이제 프로그램을 실행해보겠습니다. 실행 후 C:\ExampleFolder 디렉터리에 파일을 생성, 변경, 삭제하거나 이름을 바꾸면 콘솔에 해당 이벤트가 출력됩니다.

7. 전체 코드

다음은 전체 프로그램 코드입니다.

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string pathToWatch = @"C:\ExampleFolder";
        FileSystemWatcher watcher = new FileSystemWatcher();
        
        watcher.Path = pathToWatch;
        watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite;
        watcher.Filter = "*.*";
        
        watcher.Created += OnChanged;
        watcher.Changed += OnChanged;
        watcher.Deleted += OnChanged;
        watcher.Renamed += OnRenamed;

        watcher.EnableRaisingEvents = true;

        Console.WriteLine($"'{pathToWatch}' 디렉터리를 감시합니다. 'q'를 눌러 종료하세요.");
        while (Console.Read() != 'q') ;
    }

    private static void OnChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"파일 {e.ChangeType}: {e.FullPath}");
    }

    private static void OnRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"파일 이름 변경: {e.OldFullPath} -> {e.FullPath}");
    }
}

8. 마무리

이 프로그램은 지정한 디렉터리에서 발생하는 파일의 생성, 변경, 삭제 및 이름 변경 이벤트를 실시간으로 감시하고, 그 결과를 콘솔에 출력합니다. 이 방법을 활용하면 로그 모니터링, 파일 업로드 감시 등 다양한 상황에서 유용하게 사용할 수 있습니다.

반응형