2011-08-09 3 views
2

특정 디렉토리를 모니터링하기 위해 FileSystemWatcher을 사용하고 있습니다. 다른 사람이 파일을 편집 할 때 하나의 이벤트를 발생시키고, 파일을 작성하거나 이동할 때 다른 이벤트를 발생시켜야합니다.FileSystemWatcher에서 변경된 이벤트와 만든 이벤트를 구별 할 수 있습니까?

모니터링 된 이동 파일은 Deleted과 만든 이벤트를 조합하여 잘 작동합니다. 누군가 편집 내용을 파일에 저장하면 Changed 이벤트가 실제로 발생합니다. 그러나 파일을 이동할 때 Changed 이벤트도 발생하며 이는 Created 및 삭제 된 이벤트에 대한 처리 방법을 방해합니다.

기본적으로 사용자가 파일을 이동하거나 파일을 만들 때 편집 내용을 저장하는 경우에만 Changed 이벤트를 발생시키고 싶습니다. 실제로 Changed 이벤트인지 Created 이벤트인지 확인하기 위해 ChangeType 속성을 사용해 보았습니다. 놀랍게도 ChangeTypeCreated이 아닌 이동하거나 파일을 만들 때도 변경 이벤트가 발생하여 ChangeTypeChanged이 발생했습니다 유형 중 하나 여야합니다.)

그래서 ... 오히려 파일 생성 또는 이동보다, 변경 이벤트가 실제로 파일 편집에 의해 트리거되어 있는지 확인하는 방법을

어떤 아이디어를 몰라?

답변

3

이렇게하면 파일 이동이 때 두 필터가 적용된 경우, 그것도 두 번 Changed에게 통지합니다 NotificationFilter 같은 NotifyFilter. Attributes 등과 NotifyFilter.LastAccess의 일부를 적용 할 때 정상적인 동작입니다 "삭제 - 작성 - 변경 - 변경": 그래서,

  • 관련 알림 필터를 추가하지 마십시오. NotifyFilter. AttributesNotifyFilter.LastAccess 을 제거하는 경우 파일 이동시 Changed 이벤트가 나타나지 않으며 Deleted, Created 만 수신됩니다.
  • 당신이 이미 사용하고있는 필터를 통지 고수하는 소원이 있다면, 당신은 더러운 솔루션을 생성 할 수 있도록 힌트 여기에 다른있다, 그것은 파일의 순서를 이동한다는 사실이다 통지는 다음 ChangedCreated, 그들은
+0

감사합니다, 좋은 통찰력 ...의 순서로 항상있을 것 Deleted 될 것입니다. NofityFilter를 사용하면 파일이 삭제되고 생성 된 이벤트를 발생시키기 전에 폴더가 변경된 이벤트를 발생시키기 때문에 작동하지 않지만 두 팁과 타이머의 조합을 사용하여 수정할 수 있습니다. 당신이 말했듯이, 더러운,하지만 작동합니다 :-) – Anders

+0

다행 당신을 위해 –