ストリームがありFSEvents
、フォルダーを観察します。そのフォルダーにいくつかのファイルを追加すると、コールバック関数がそれをトリガーします。FSEventStreamEventFlags
しかし、フォルダーにファイルを追加したり、ファイルが変更されたことを確認したりするなど、定数を使用して特定のイベントを確認できると思いましたが、できません。これは、履歴が完了している場合にのみ作成できます。
void fileSystemEventCallback(ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
char **paths = eventPaths;
int i;
for (i = 0; i < numEvents; i++) {
if (eventFlags[i]==kFSEventStreamEventFlagHistoryDone) {
NSLog(@"history Done");
}
}
他のすべてFSEventStreamEventFlags
の定数を確認しましたが、フォルダーへのファイルの追加、ファイルの変更、または削除をトリガーする定数はありません。私は今のところこの構造を使用しています:
void fileSystemEventCallback(ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
char **paths = eventPaths;
int i;
for (i = 0; i < numEvents; i++) {
if (eventFlags[i]==kFSEventStreamEventFlagHistoryDone) {
NSLog(@"history Done");
}
else{
NSLog(@"some activity in a folder");
}
}
しかし、この構造を使用すると、ファイルなどを追加すると、複数のコールバックが返されます (つまり、複数の NSLog メッセージ「フォルダー内のアクティビティ」があります)。なんで?コールバックを 1 つだけ取得するにはどうすればよいですか?