Mon conseil est de mordre juste la balle et faire un scan de répertoire dans un autre thread, même si vous parlez des milliers de fichiers. Mais si vous insistez, voici la réponse:
Il n'y a aucun moyen de le faire sans vous retrousser les manches et faire du kernel-diving.
Votre première option consiste à utiliser l'infrastructure FSEvents, qui envoie des notifications lorsqu'un fichier est créé, modifié ou supprimé (ainsi que des choses à faire avec des attributs). L'aperçu est here, et quelqu'un a écrit un Objective C wrapper autour de l'API, bien que je ne l'ai pas essayé. Mais la vue d'ensemble ne mentionne pas la partie sur les événements entourant les changements fichier, juste des répertoires (comme avec kqueue). J'ai fini par utiliser le code de here avec le fichier d'en-tête here pour compiler mon propre enregistreur que je pourrais utiliser pour obtenir des événements au niveau du fichier individuel. Vous devez écrire du code dans votre application pour exécuter l'enregistreur en arrière-plan et le surveiller.
Sinon, regardez la commande "fs_usage", qui surveille en permanence toute l'activité du système de fichiers (et je veux dire all). Cela vient déjà avec Darwin, donc vous n'avez pas à le compiler vous-même. Vous pouvez utiliser kqueue pour écouter les changements de répertoire, tout en surveillant la sortie de "fs_usage". Si vous recevez une notification de la part de kqueue qu'un répertoire a changé, vous pouvez regarder la sortie de fs_usage, voir dans quels fichiers ont été écrits, et vérifier les noms de fichiers par rapport au répertoire qui a été modifié. fs_usage est un firehose, alors soyez prêt à utiliser certaines options avec Grep pour l'apprivoiser. Pour rendre les choses plus amusantes, votre enregistreur FSEvents et fs_usage nécessitent un accès root, vous devrez donc obtenir l'autorisation de l'utilisateur avant de pouvoir les utiliser dans votre application OS X (consultez la section Authorization Services Programming Guide pour plus d'informations pour le faire).
Si tout cela semble horriblement compliqué, c'est parce que c'est. Mais au moins, vous n'aviez pas à le découvrir à la dure!
Souhaitez-vous Mac OS X et iOS? –
Je cible OS X mais cela m'intéresserait aussi si cela fonctionnait sur iOS. – DHamrick