2012-10-02 6 views
3

나는 맥 파일 시스템 이벤트 API (여기서는 apple developer doc)를 사용하여 C++에서 간단한 파일 시스템 감시자를 만들었습니다. 제 질문은 제목에 있습니다. 변경된 사항의 ​​경로를 얻으려면 어떻게해야합니까? eventPaths 배열은 필자가 본질적으로 본 부모 디렉토리 (또는 그 집합)의 경로만을 제공합니다. 그러나 수정 된 기본 디렉토리 항목은 아닙니다.FSEvent ID에서 파일 이름을 가져올 수 있습니까?

나는 콜백, 즉 : 나는 아마 이름이 이러한 항목 중 하나에서 추출 할 수있는

static void mycallback(
      ConstFSEventStreamRef streamRef, 
      void *clientCallBackInfo, 
      size_t numEvents, 
      void *eventPaths, 
      const FSEventStreamEventFlags eventFlags[], 
      const FSEventStreamEventId eventIds[]) 

을 생각하고 있어요을 사용하여 유용한 정보를 잡을 수 있습니까?

편집 :

예를 들어, 하나의 파일이

kFSEventStreamEventFlagItemCreated

가 발생하는 경우에 생성 될 수도 있습니다. 그러나 해당 항목의 실제 이름을 얻으려면 어떻게해야합니까? (항목이 삭제 될 때와 같이 다른 이벤트의 경우와 유사하게).

편집 2 :

는 나는 내가 원하는 일을 할 수 없을 것이라고 생각하기 시작하고있다. FS tech overview에서

"알림의 세분성은 디렉터리 수준이며 디렉터리의 내용이 변경되었음을 알려주지 만 변경된 내용은 알려주지 않습니다."

아카. 도청 전문가.

건배,

벤.

답변

4

사실이 10.7 만, 수있다. FSEventStreamCreate (docs here)에 대한 kFSEventStreamCreateFlagFileEvents 플래그를 확인하십시오.

+0

정말요? 훌륭한! 감사! :-)보세요 ... –

+1

정확히 내가 원했던 것입니다. 탐색하는 서브 디렉토리의 수와 마찬가지로 검색 프로세스의 깊이를 제한 할 수 있는지 알고 있습니까? 건배. –

+0

내가 아는 바가 없다. 나는 당신이 그것을 수동으로해야 할 것이라고 생각합니다. – Kat

0

불행히도 내가 발견 한대로 불가능합니다. 설명/동기 부여에 대해서는 FS tech overview을 참조하십시오. 해결 방법은 디렉토리의 스냅 샷을 찍은 다음 변경 사항이 발견 될 때마다 변경된 특정 디렉토리 항목 (및 해당 이름)을 찾기 위해 원본 스냅 샷과 새로운 스냅 샷을 비교하여 원본 스냅 샷을 비교하는 것입니다.

EDIT : 것이 가능 내의> = 10.7 (선택된 답 참조)

관련 문제