az-io
自动收集自
crates/core/io/README.md。
文件系统 I/O 工具库,提供「移动并符号链接回原位」(mvln)和路径确保等便捷操作。
功能
mvln— 将文件/目录移动到新位置,并在原路径创建符号链接指向新位置,适用于数据迁移后保留原有访问路径undo_mvln— 撤销 mvln 操作:移除符号链接并将文件移回原位PathExttrait — 为Path扩展三个常用方法:ensure_file()— 确保路径存在且为文件,不存在则自动创建ensure_dir()— 确保路径存在且为目录,不存在则自动创建remove_if_exists()— 安全删除路径,不存在时静默通过
MoveLink— builder 风格的 mvln 包装器,支持链式调用- 错误上下文 — 公开 API 使用
anyhow::Result,文件系统失败会保留底层错误并附带路径上下文
安装
在 Cargo.toml 中添加:
[dependencies]
az-io = { path = "../io" } # workspace 内部引用
# 或发布后:
# az-io = "0.1" # crates.io 引用
用法
use az_io::filesystem::{MoveLink, PathExt, mvln};
use std::path::Path;
fn main() -> anyhow::Result<()> {
// 将文件移动到新位置并符号链接回原位
let new_path = mvln("data.db", "/mnt/external")?;
// 使用 builder 风格
let new_path = MoveLink::new("data.db").to("/mnt/external").move_and_link()?;
// 撤销操作
az_io::filesystem::undo_mvln("data.db")?;
// 确保目录存在
Path::new("./output/logs").ensure_dir()?;
// 确保文件存在(自动创建父目录)
Path::new("./output/config.json").ensure_file()?;
// 安全删除
Path::new("./temp").remove_if_exists()?;
Ok(())
}
依赖的 crates
anyhow— 统一错误返回与上下文补充
平台说明
符号链接操作仅在 Unix 平台可用;非 Unix 平台调用 mvln / MoveLink 时返回带上下文的错误。