Watch A Directory For File Changes In Rust
I'm using `notify_debouncer_mini`` in my Rust apps to watch directories for file changes.
A basic sample looks like this:
use notify_debouncer_mini::{new_debouncer, notify::*};
use std::path::PathBuf;
use std::time::Duration;
fn main() {
let _ = watch_files();
}
fn watch_files() -> Result<()> {
let watch_dir = PathBuf::from(".");
let (tx, rx) = std::sync::mpsc::channel();
let mut debouncer = new_debouncer(Duration::from_millis(100), tx)?;
debouncer
.watcher()
.watch(&watch_dir, RecursiveMode::Recursive)?;
for result in rx {
match result {
Ok(events) => events.iter().for_each(|event| {
dbg!(&event.path);
}),
Err(_) => {}
}
}
Ok(())
}
-
The "notify_debouncer_mini" crate filters incoming events and emits only one event per timeframe per file
-
The Duration in this examples is milliseconds. If you set it two 2000 and change a file you'll see the notification 2 seconds later
-
Sometimes it takes a little longer for things to register
-
There's also "notify_debouncer_full" with more features including ones designed to prevent sending multiple events for renames. I don't need that for my use case
-
This example uses and mpsc::channel. Callbacks can be used as well
-
Both _mini and _full ride on top of the overall notify crate which is a cross-platform file system notification library