Programming/C/C++/C#

C# 파일 감시자(FileSystemWatcher) 예제

휘탱 2019. 11. 6. 03:00

https://docs.microsoft.com/ko-kr/dotnet/api/system.io.filesystemwatcher?view=netcore-3.1

 

샘플코드

using System;
using System.IO;

namespace Test {
    internal class Program {
        private static void Main(string[] args)
        {
        	// "/" 안됨. "\\"변경 해야함.
            path.Replace("/", "\\");
            var directory = Directory.GetCurrentDirectory();
            var Watcher = new Watcher();
            Watcher.Init(directory);

            Console.WriteLine("경로:" + directory);
            Console.WriteLine("'q' 입력시 종료");
            while (Console.Read() != 'q') ;
        }
    }
}

public class Watcher {
    private readonly FileSystemWatcher m_watcher = new FileSystemWatcher();
    public void Init(string path)
    {
        m_watcher.Path = path;

        // 변경 사항을 감시 타입
        m_watcher.NotifyFilter = NotifyFilters.LastAccess
                               | NotifyFilters.LastWrite
                               | NotifyFilters.FileName
                               | NotifyFilters.DirectoryName;

        // 감시 필터
        m_watcher.Filter = "*.txt";

        // 이벤트 등록
        m_watcher.Changed += OnChanged;
        m_watcher.Created += OnChanged;
        m_watcher.Deleted += OnChanged;
        m_watcher.Renamed += OnRenamed;

        // 구성 요소가 활성화되는지를 나타내는 값을 가져오거나 설정합니다.
        m_watcher.EnableRaisingEvents = true;
        // 지정된 경로 내에 있는 하위 디렉터리를 모니터링해야 하는지를 나타내는 값을 가져오거나 설정합니다.
        m_watcher.IncludeSubdirectories = true;
    }

    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // 파일 변경, 생성, 삭제시 로직
        Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
    }
    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // 파일 이름이 변경시 로직
        Console.WriteLine($"File: {e.OldFullPath} renamed to {e.FullPath}");
    }
}
출처: https://dlgnlfus.tistory.com/847 [게임 개발 일기장:티스토리]

 

실행 결과

반응형