16 个稳定版本

2.11.0 2023 年 11 月 20 日
2.9.0 2022 年 10 月 31 日
2.7.0 2022 年 2 月 19 日
2.6.0 2021 年 5 月 6 日
0.1.2 2020 年 2 月 10 日

#9 in 文件系统

Download history 175966/week @ 2024-04-28 176381/week @ 2024-05-05 192707/week @ 2024-05-12 183141/week @ 2024-05-19 185590/week @ 2024-05-26 190279/week @ 2024-06-02 191757/week @ 2024-06-09 189454/week @ 2024-06-16 189016/week @ 2024-06-23 190040/week @ 2024-06-30 224558/week @ 2024-07-07 230963/week @ 2024-07-14 248210/week @ 2024-07-21 236718/week @ 2024-07-28 247358/week @ 2024-08-04 239124/week @ 2024-08-11

989,014 每月下载量
用于 876 个 Crates (145 直接)

MIT/Apache

80KB
1.5K SLoC

fs-err

Crates.io GitHub Actions

fs-err 是 std::fs 的替代品,提供更详细的错误信息。额外信息包括尝试的操作和任何涉及的路径。

错误信息

使用 std::fs,如果此代码失败

let file = File::open("does not exist.txt")?;

Rust 给出的错误信息不是很有用

The system cannot find the file specified. (os error 2)

...但如果使用 fs-err,我们的错误包含更多信息

failed to open file `does not exist.txt`
    caused by: The system cannot find the file specified. (os error 2)

使用方法

fs-err 的 API 与 std::fs 相同,因此迁移代码使用它很容易。

// use std::fs;
use fs_err as fs;

let contents = fs::read_to_string("foo.txt")?;

println!("Read foo.txt: {}", contents);

fs-err 使用 std::io::Error 处理所有错误。这有助于 fs-err 与标准库中的 traits(如 std::io::Read)以及使用它们的 crates(如 serde_json)良好组合。

use fs_err::File;

let file = File::open("my-config.json")?;

// If an I/O error occurs inside serde_json, the error will include a file path
// as well as what operation was being performed.
let decoded: Vec<String> = serde_json::from_reader(file)?;

println!("Program config: {:?}", decoded);

最低支持的 Rust 版本

这个 crate 在测试中使用的最老 Rust 版本是 1.40

这个 crate 通常会谨慎地更新 Rust 版本。它使用 autocfg crate 允许包装新 API 而不增加最低支持 Rust 版本 (MSRV)。

如果启用了 tokio 功能,这个 crate 将继承所选 tokio 版本的 MSRV。

许可

根据您的要求,许可方式为

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交供作品包含的贡献,应双重许可如上,不附加任何其他条款或条件。

依赖项

~0–1.1MB
~19K SLoC