2014-04-04 6 views
1

Windows 서비스에 다음 FileSystemWatcher 설치가 있습니다.IncludeSubdirectctories가 false로 설정된 경우에도 FileSystemWatcher는 하위 디렉터리 이벤트를 가져옵니다.

FileSystemWatcher Watcher = new FileSystemWatcher(); 
    Watcher.Path = watcherDir; 
    Watcher.NotifyFilter = NotifyFilters.LastWrite; 
    Watcher.Renamed += Watcher_Renamed; 
    Watcher.Changed += Watcher_Changed; 
    Watcher.Error += Watcher_Error; 
    Watcher.Filter = "*.*"; 
    Watcher.IncludeSubdirectories = false; 
    Watcher.EnableRaisingEvents = true; 

일부 불일치하는 동작이 나타납니다. 서브 디렉토리의 변경 사항도 수신 대기합니다. 나는 그것이 조금 이상하다는 것을 알기 위해 기록했다.
C : \ Temp \ Folder1을보고 있는데 다른 프로세스는 C : \ Temp \ Folder1 \ Folder2에 로그 파일을 만듭니다. 이 FileSystemWatcher 객체가이 정보를 선택합니다.
1. e.FullPath는 하위 디렉토리의 이름을 지정합니다.이 경우 C : \ Temp \ Folder1 \ Folder2
2. Path.GetDirectoryName (e.FullPath) 나는 실제로 C : \ Temp \ Folder1을보고있다.
3. 확장자가 비어 있으며이 점을 무시하고 이것이이 경우를 무시하는 방법입니다.

여기에 무슨 일이 일어나는지 알아낼 수있는 방법에 대한 제안이 있으십니까?

답변

2

디렉토리 내의 파일 생성 또는 삭제는 해당 디렉토리에 대한 변경 사항으로 계산됩니다. . 그것이 당신에게보고되는 사건입니다. Folder2, 그 자체가 모니터링중인 디렉토리 내에 있습니다.

보고 된 경로는 파일의 경로가 아니라 디렉토리 경로이며 파일 시스템 작업이 실제로 생성 또는 삭제 되었음에도 불구하고 사용자의 Changed 처리기가 호출됨을 알 수 있습니다.

이벤트 처리기에서보고 된 경로가 a directory이고 단지 return인지 확인하고 이벤트 처리기에서 더 이상 처리하지 않아도됩니다.

+0

예, 이미 확인했지만 Watcher.IncludeSubdirectories = false가 아니어야합니다. 심지어 이것이 발생하는 것을 막으시겠습니까? – Kodathon

+0

@Kodathon - no. 디렉토리를 파일 목록이 들어있는 특수 파일과 파일 시스템에서 찾을 수있는 위치라고 생각하십시오. 디렉토리에서 파일을 추가하거나 제거하면 해당 특수 파일 자체가 변경됩니다. 그리고이 파일은 모니터링중인 'Folder1' 디렉토리에 앉아서 이벤트를 받고있는 특별한 파일입니다. * Folder2 내의 파일 *이 변경되면 이벤트를 수신하지 않습니다. 디렉터리에 파일을 추가하거나 제거하는 경우. –

+0

해당 속성이 처리 한 경우 선호했을 것입니다. 어쨌든이 여분의 수표로 경로를 확인합니다. 감사 ! – Kodathon