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. 마무리
이 프로그램은 지정한 디렉터리에서 발생하는 파일의 생성, 변경, 삭제 및 이름 변경 이벤트를 실시간으로 감시하고, 그 결과를 콘솔에 출력합니다. 이 방법을 활용하면 로그 모니터링, 파일 업로드 감시 등 다양한 상황에서 유용하게 사용할 수 있습니다.
'C#' 카테고리의 다른 글
C#으로 간단한 로깅 시스템 구축하기 (3) | 2024.10.27 |
---|---|
C#으로 간단한 메모장 애플리케이션 만들기 (0) | 2024.09.17 |
2개의 스레드를 활용하여 압축 및 해제 작업을 동시에 수행하는 방법 (0) | 2024.09.15 |
Genesys API를 사용하여 채팅 기록 가져오기: HTML 및 JavaScript 샘플 가이드 (0) | 2024.08.24 |
Genesys API를 사용하여 사용자 정보 가져오기: HTML 및 JavaScript 샘플 가이드 (0) | 2024.08.24 |