diff --git a/README.md b/README.md index 877cb4e..41418f1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,6 @@ with the following differences: * No synchronous versions of methods (e.g., `mkdir()` but not `mkdirSync()`). * No permissions (e.g., no `chown()`, `chmod()`, etc.). -* No support (yet) for `fs.watchFile()`, `fs.unwatchFile()`, `fs.watch()`. * No support for stream-based operations (e.g., `fs.ReadStream`, `fs.WriteStream`). Filer has other features lacking in node.js (e.g., swappable backend @@ -246,6 +245,7 @@ var fs = new Filer.FileSystem(); * [fs.fgetxattr(fd, name, callback)](#fgetxattr) * [fs.removexattr(path, name, callback)](#removexattr) * [fs.fremovexattr(fd, name, callback)](#fremovexattr) +* [fs.watch(filename, [options], [listener])](#watch) #### fs.rename(oldPath, newPath, callback) @@ -942,6 +942,52 @@ fs.open('/myfile', 'r', function(err, fd) { }); ``` +#### fs.watch(filename, [options], [listener]) + +Watch for changes to a file or directory at `filename`. The object returned is an `FSWatcher`, +which is an [`EventEmitter`](http://nodejs.org/api/events.html) with the following additional method: + +* `close()` - stops listening for changes, and removes all listeners from this instance. Use this +to stop watching a file or directory after calling `fs.watch()`. + +The only supported option is `recursive`, which if `true` will cause a watch to be placed +on a directory, and all sub-directories and files beneath it. + +The `listener` callback gets two arguments (event, filename). `event` is either 'rename' or 'change', +(currenty only `'rename'` is supported) and filename is the name of the file which triggered the event. + +Unlike node.js, all watch events return a path. Also, all returned paths are absolute from the root +vs. just a relative filename. + +Examples: + +```javascript +// Example 1: create a watcher to see when a file is created +var watcher = fs.watch('/myfile', function(event, filename) { + // event will be 'change' and filename will be '/myfile' + // Stop watching for changes + watcher.close(); +}); +fs.writeFile('/myfile', 'data'); + +// Example 2: add the listener via watcher.on() +var watcher = fs.watch('/myfile2'); +watcher.on('change', function(event, filename) { + // event will be 'change' and filename will be '/myfile2' + // Stop watching for changes + watcher.close(); +}); +fs.writeFile('/myfile2', 'data2'); + +// Example 3: recursive watch on /data dir +var watcher = fs.watch('/data', { recursive: true }, function(event, filename) { + // event will be 'change' and filename will be '/data/subdir/file' + // Stop watching for changes + watcher.close(); +}); +fs.writeFile('/data/subdir/file', 'data'); +``` + ### FileSystemShell Many common file system shell operations are available by using a `FileSystemShell` object.