문제

Mac에서 몇 개의 디렉터리에 대한 파일 시스템 이벤트를 모니터링하고 싶습니다.모니터링하려는 디렉터리는 런타임 시 변경될 수 있으므로 FSEvents를 사용하면 내 앱이 수행하는 작업이 다음과 같습니다.

  • 콜백을 처리하기 위한 전역 콜백 함수를 생성합니다.
  • 폴더별로 새 FSEventStreamRef를 생성하여 위에서 생성한 콜백과 연결하고 변경 콜백을 이 폴더와 연결하는 데 도움이 되는 컨텍스트를 eventStream에 추가합니다.

대부분 작동하는 것 같지만 콜백이 호출되고 'eventPaths' 값이 콜백으로 전송될 때 이상한 점을 발견했습니다.

예를 들어 /Foo 및 /Bar에 대한 StreamRef를 생성한 경우 /Bar에 파일을 추가하면 콜백이 거의 즉시 호출되지만 eventPaths는 /Foo의 위치를 ​​가리키고 StreamRef와 연결된 컨텍스트는 다음과 같습니다. /Foo의 경우도 마찬가지입니다.

또는 /Foo 및 /Bar를 모니터링하고 /Bar를 제거한다고 가정해 보겠습니다(/Bar에 대한 StreamRef를 올바르게 중지하고 닫음).이제 /Fee에 대한 새 FSEventStreamRef를 생성하고 동일한 콜백과 연결합니다./Fee를 변경해도 콜백이 호출되지 않지만 /Foo를 변경하면 계속해서 콜백이 발생합니다.

온라인에서 본 모든 예제나 문서는 단일 폴더 모니터링에 대해서만 설명합니다.단일 콜백을 여러 FSEventStreamRef와 연결하는 방법에 문제가 있습니까?그래도 문제 될 것 같지는 않은데...

안정적으로 작동하는 방식으로 유사한 작업을 수행한 사람이 있습니까? 아니면 다르게 시도할 수 있는 방법에 대한 제안이 있습니까?

이것을 실험하면서 시도한 한 가지는 단일 FSEventStreamRef를 사용하고 내가 원하는 모든 경로가 포함된 CFArrayRef를 전달하는 것입니다. 그리고 내 감시 목록이 변경되면 닫히고 새 FSEventStreamRef를 다시 생성합니다. 이는 훨씬 더 나쁘게 작동합니다. 위의.

도움이 되었습니까?

해결책

나를 위해 작동합니다. 저는 다음과 같은 특성을 에뮬레이션했습니다.

  1. 스트림당 하나의 경로
  2. 경로/스트림당 하나의 컨텍스트
  3. 모든 스트림에 대한 하나의 콜백

실패한 코드를 보여줄 수 있나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top