2015-01-14 5 views
0

특정 디렉토리를보고 테스트 확장자가있는 파일을 보려면 filesystemwatcher를 만들었습니다.필터가있는 FileSystemWatcher가 삭제 된 맵을 보지 않습니다.

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = somepath; 
watcher.Filter = "*.Tests"; 
// Hooked changed, deleted and created events 
watcher.IncludeSubdirectories = true; 
watcher.EnableRaisingEvents = true; 

이벤트는 테스트 확장자를 가진 파일이 생성 될 때, 제거하거나 감시 디렉토리에서 변경하거나 하위 디렉터리의 제대로 트리거합니다.

문제는 예를 들어 테스트 확장이있는 파일이있는 감시 대상 디렉토리에서지도를 제거하는 경우입니다. Tests 확장명이있는 많은 파일이 삭제되지만 이벤트는 트리거되지 않습니다.

이렇게 할 수있는 방법이 있습니까?

답변

2

글쎄, 문제는 파일이 폴더가 삭제 될 때 실제로 삭제되지 않는다는 것입니다. 따라서 FileSystemWatcher은 필터링 할 방법이 없습니다. 디렉토리에 대해 하나의 삭제 만받습니다. 실제로이 문제를 처리해야하는 경우 별도의 FileSystemWatcher을 사용하여 전체 디렉토리를 삭제해야합니다.

물론 이것은 또한 삭제가 수행되는 방식에 달려 있습니다. 많은 응용 프로그램이 여전히 "모든 파일을 삭제 한 다음 디렉토리"를 수행합니다. 차이점을 쉽게 알 수 있습니다. 많은 파일이있는 디렉토리를 삭제하는 데 시간이 걸리면 먼저 파일을 삭제합니다. 그것들은 당신의 경우에 올바르게 작동 할 것이지만 다른 것들은 실패 할 것입니다.

해결 방법이 필요하면 대부분의 응용 프로그램은 디렉토리에 파일이 잠겨있는 경우와 같이 단일 삭제로 디렉토리를 삭제할 수없는 경우 파일 별 삭제로 전환합니다.

+0

정보를 제공해 주셔서 감사 드리며, 지금 나는 무엇이 일어나고 있는지 알고 있습니다. 필터를 없애고 이벤트 핸들러에서 확장 기능을 점검 할 것입니다. –