폴더 모니터링
파일 생성,삭제,변경등 감지 이벤트
C# 에서 특정 폴더에 파일이 생성되면 처리하는 로직이 필요할때가 많습니다.
타이머를 써서 처리할 수도 있지만, 비효율적이죠. 주기적으로 계속해서 파일을 비교하고, 변화를 감지해야하니까요.
그래서 이벤트를 발생시키는 FileSystemWatcher 라는 것을 씁니다.
C# 콘솔 프로그램으로 테스트 해보겠습니다.
먼저, 콘솔 프로젝트 생성.
FileSystemWatcher 를 사용하기 위해 클래스를 생성하겠습니다.
그냥 Program.cs 에 main 함수 안에 작성해도됩니다만 -_- ㅋ . 클래스로 만들면 나중에 그대로 써먹을수있겠죠. 이벤트가 발생했을때 호출하는 함수를 delegate 로 넘기면 class를 호출한 곳의 함수를 쓸 수 있습니다. 음.. 나중에 포스팅 하기로 하죠 ㅎ
FileSystemWatcher 는 System.IO 에 있습니다. 참조 해주시고요.
<아시겠지만 Tip>
그리고 Event 추가는 Tab 키를 사용해서 자동으로 입력할 수 있습니다.
fileSystemWatcher.Changed += 까지만 치면 커서 아래에 메시지가 나오죠. "삽입하려면 <Tab>키 누름" .
이 상태에서 Tab 을 누르면 메소드가 자동으로 입력되어집니다.
#소스
#Program.cs
using System;
using System.IO;
namespace DirectoryWatcher
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\tmp\watcherTest";
// 폴더가 없으면 FileSystemWatcher 를 생성할때 오류가 발생함.
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
Watcher watcher = new Watcher(path);
Console.WriteLine("종료하려면 앤터를 입력하세요.");
Console.ReadLine();
}
}
}
#Watcher.cs
특정 파일만 처리하고 싶다면 두번째 파라메터인 *.* 을 변경해주면 됩니다. 예를들어 텍스트 파일만 모니터링 한다면 "*.txt".
new FileSystemWatcher(directoryPath, "*.txt");
WaitForChanged(WatcherChangeTypes.All);
- WatcherChangeTypes.All
- WatcherChangeTypes.Changed
- WatcherChangeTypes.Created
- WatcherChangeTypes.Deleted
- WatcherChangeTypes.Renamed
언젠가 써먹을 때가 있을듯하네요. 예를들면 삭제될때까지 프로세스를 멈춰야할때나.. 등등
F5 를 눌러 프로그램을 실행시키고 테스트를 해보겠습니다.
마우스 우클릭 -> 새로만들기 -> 파일이나 폴더 로 생성하면 이벤트가
Changed 이벤트 발생 후 Renamed 이벤트가 발생합니다. 생성할때 이름을 바꿨으니까요.
삭제하면 Deleted 이벤트가 발생합니다.
아래와 같이 드래그를 해서 파일 이동을 하면 Create 이벤트만 발생합니다.
여기서 주의할 것은, Control + V 로 붙혀넣기 할때! 아래와 같이 Create, Change, Change 가 발생합니다.
이 모니터링 프로그램을 개발 할 때, 어떻게 파일이 생성되고 삭제되고 이동되는지 미리 해보고,
어떤 이벤트가 호출되는지, 순서는 어떤지 확인해야 겠습니다.
<Tip>
Windows Form 프로젝터에서는 이러한 이벤트로 호출되어서 UI 를 변경 할 때 Invoke 를 사용해야 하겠죠.
2019/01/11 - [C#] - log4net 사용법 ( Visual Studio Windows form ) C#
'C# 기술' 카테고리의 다른 글
C# try catch finally 제대로 쓰기 (0) | 2019.01.20 |
---|---|
DataTable VS Dictionary 검색 속도 차이 (2) | 2019.01.19 |
TextBox 숫자만 입력 ( Windows Form C# ) (0) | 2019.01.19 |
log4net 사용법 ( Visual Studio Windows form ) C# (0) | 2019.01.11 |
Visual Studio Build Environmant, 빌드 환경 변수 설정 (0) | 2019.01.10 |
댓글