Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Observe a File or Folder in Objective-C

What is the best way to listen to a folder or file to see if it has been saved or if a new file has been added?

like image 363
Garrett Avatar asked Sep 06 '09 21:09

Garrett


4 Answers

The FSEvents API is ideal if you just want to watch directories but it doesn't handle the monitoring of individual files. Stu Connolly has a great Objective-C wrapper for the FSEvents C API, it's called SCEvents and you can get it here:

http://stuconnolly.com/blog/scevents-011/

The nice thing about FSEvents is that you just need to watch one folder and you will be notified of any changes that occur anywhere in the subfolder hierarchy of that folder.

If you need file-level notifications you will need to use kqueues. Uli Kusterer has a great Objective-C wrapper:

http://zathras.de/angelweb/sourcecode.htm#UKKQueue

Either of these methods is a lot easier than wrangling with the C APIs directly, which are not particularly well documented and a bit obtuse.

If you need to support Tiger you'll need to use kqueues as the FSEvents API wasn't officially available in 10.4.

like image 67
Rob Keniger Avatar answered Oct 31 '22 04:10

Rob Keniger


Try using FSEvents, although it is a C API

OS 10.5 or newer

like image 33
cobbal Avatar answered Oct 31 '22 03:10

cobbal


If you do need to use kqueue (as discussed in other answers) Google Toolbox for Mac has a nice Objective-C wrapper that I've used with no issues thus far.

like image 43
Lawrence Johnston Avatar answered Oct 31 '22 03:10

Lawrence Johnston


If you are changing a file or folder, I believe the Spotlight search engine will update its database to reflect your changes.

So you might set up a thread that listens for kMDQueryDidUpdateNotification notifications through a Spotlight query specific to that file or folder.

When you get those notifications, you could fire a selector that does something you want.

like image 35
Alex Reynolds Avatar answered Oct 31 '22 03:10

Alex Reynolds