Crate unistore_watcher

Crate unistore_watcher 

Source
Expand description

§unistore-watcher

文件监控能力 - UniStore 能力生态的一部分。

§功能特性

  • 跨平台: 基于 notify 库,支持 Windows/Linux/macOS
  • 事件防抖: 合并短时间内的重复事件
  • 异步友好: 完美集成 tokio 异步运行时
  • 路径管理: 灵活的监控路径管理
  • 递归监控: 可选择监控子目录

§快速开始

use unistore_watcher::{FileWatcher, WatcherConfig, FileEvent};
use std::path::Path;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建监控器
    let mut watcher = FileWatcher::new(WatcherConfig::default())?;
     
    // 添加监控路径
    watcher.watch(Path::new("."))?;
     
    // 获取事件接收器
    let mut rx = watcher.subscribe();
     
    // 处理事件(示例:只处理一个事件)
    if let Ok(event) = rx.recv().await {
        println!("文件事件: {}", event);
    }
     
    Ok(())
}

§事件类型

use unistore_watcher::FileEvent;
use std::path::PathBuf;

fn handle_event(event: FileEvent) {
    match event {
        FileEvent::Created(path) => println!("创建: {:?}", path),
        FileEvent::Modified(path) => println!("修改: {:?}", path),
        FileEvent::Deleted(path) => println!("删除: {:?}", path),
        FileEvent::Renamed { from, to } => {
            println!("重命名: {:?} -> {:?}", from, to)
        }
        FileEvent::Accessed(path) => println!("访问: {:?}", path),
        FileEvent::Other { kind, paths } => {
            println!("其他 {}: {:?}", kind, paths)
        }
    }
}

§配置选项

use unistore_watcher::WatcherConfig;
use std::time::Duration;

let config = WatcherConfig::default()
    .recursive(true)                          // 递归监控子目录
    .debounce(Duration::from_millis(100))     // 事件防抖
    .buffer_size(1000)                        // 事件缓冲区大小
    .filter_hidden(true);                     // 过滤隐藏文件

Structs§

FileWatcher
文件监控器
WatcherConfig
监控器配置

Enums§

FileEvent
文件系统事件
WatcherError
文件监控错误

Functions§

watch_path
简化的监控 API