Rust 中的文件系统监视
Filesystem watch in Rust
我正在尝试用 Rust 实现一个文件系统监视器。当文件系统对象发生变化时,我可以接收到事件,但确定发生了什么变化让我很困惑。我在 Notify 包 here 的最新发布版本中找到了代码,它几乎把我带到了那里。
如何从 event
中提取路径和类型?该事件是一个枚举类型,但不知何故,当它被打印时,我看到了我想要的所有信息。
我显然遗漏了一些非常基本的东西。
use notify::{watcher, RecursiveMode, Watcher};
use std::sync::mpsc::channel;
use std::time::Duration;
fn main() {
let (tx, rx) = channel();
let mut watcher = watcher(tx, Duration::from_secs(10)).unwrap();
watcher
.watch("/tmp/path", RecursiveMode::Recursive)
.unwrap();
loop {
match rx.recv() {
Ok(event) => {
// **>> event.filename? event.type? how?
println!("{:?}", event);
}
Err(e) => println!("watch error: {:?}", e),
}
}
}
使用去抖动的观察者,你得到的事件是 DebouncedEvent 类型的。枚举变体指定类型,其内容是路径。要将其从事件中取出,您应该在事件上匹配所需的事件类型:
match &event {
Read(path) => {
// do thing
}
Rename(src, dest) => {
// do other thing
}
_ => () // don't care about other types
}
我正在尝试用 Rust 实现一个文件系统监视器。当文件系统对象发生变化时,我可以接收到事件,但确定发生了什么变化让我很困惑。我在 Notify 包 here 的最新发布版本中找到了代码,它几乎把我带到了那里。
如何从 event
中提取路径和类型?该事件是一个枚举类型,但不知何故,当它被打印时,我看到了我想要的所有信息。
我显然遗漏了一些非常基本的东西。
use notify::{watcher, RecursiveMode, Watcher};
use std::sync::mpsc::channel;
use std::time::Duration;
fn main() {
let (tx, rx) = channel();
let mut watcher = watcher(tx, Duration::from_secs(10)).unwrap();
watcher
.watch("/tmp/path", RecursiveMode::Recursive)
.unwrap();
loop {
match rx.recv() {
Ok(event) => {
// **>> event.filename? event.type? how?
println!("{:?}", event);
}
Err(e) => println!("watch error: {:?}", e),
}
}
}
使用去抖动的观察者,你得到的事件是 DebouncedEvent 类型的。枚举变体指定类型,其内容是路径。要将其从事件中取出,您应该在事件上匹配所需的事件类型:
match &event {
Read(path) => {
// do thing
}
Rename(src, dest) => {
// do other thing
}
_ => () // don't care about other types
}