3 个不稳定版本

0.2.1 2024 年 7 月 25 日
0.2.0 2023 年 12 月 22 日
0.1.0 2023 年 5 月 18 日

#335文件系统

Download history 1232/week @ 2024-04-29 1046/week @ 2024-05-06 487/week @ 2024-05-13 1008/week @ 2024-05-20 730/week @ 2024-05-27 519/week @ 2024-06-03 129/week @ 2024-06-10 121/week @ 2024-06-17 118/week @ 2024-06-24 98/week @ 2024-07-01 127/week @ 2024-07-08 287/week @ 2024-07-15 222/week @ 2024-07-22 150/week @ 2024-07-29 130/week @ 2024-08-05 93/week @ 2024-08-12

每月 609 次下载

MIT 许可证

82KB
1.5K SLoC

Project Status: Active – The project has reached a stable, usable state and is being actively developed. CI Status codecov.io Minimum Supported Rust Version MIT License

GitHub | crates.io | 文档 | 问题 | 变更日志

in_place 库提供了一个 InPlace 类型,用于“原地”读取和写入文件:你写入的数据最终会出现在你读取的同一文件路径,而 in_place 会为你处理所有必要的临时文件操作。

例如,给定文件 somefile.txt

'Twas brillig, and the slithy toves
    Did gyre and gimble in the wabe;
All mimsy were the borogoves,
    And the mome raths outgrabe.

以及以下程序

use in_place::InPlace;
use std::io::{BufRead, BufReader, Write};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let inp = InPlace::new("somefile.txt").open()?;
    let reader = BufReader::new(inp.reader());
    let mut writer = inp.writer();
    for line in reader.lines() {
        let mut line = line?;
        line.retain(|ch| !"AEIOUaeiou".contains(ch));
        writeln!(writer, "{line}")?;
    }
    inp.save()?;
    Ok(())
}

程序运行后,somefile.txt 将会原地修改,变成以下内容

'Tws brllg, nd th slthy tvs
    Dd gyr nd gmbl n th wb;
ll mmsy wr th brgvs,
    nd th mm rths tgrb.

那些讨厌的元音不再存在!如果你想保留那些讨厌的元音,你可以通过以下方式将文件的原始内容保存到,比如说 somefile.txt~

let inp = InPlace::new("somefile.txt")
    .backup(in_place::Backup::Append("~".into()))
    .open()?;

或者用以下方式保存到 someotherfile.txt

let inp = InPlace::new("somefile.txt")
    .backup(in_place::Backup::Path("someotherfile.txt".into()))
    .open()?;

如果你在编辑过程中决定不想修改文件(比如,因为发生了不可恢复的错误),调用 inp.discard() 而不是 inp.save() 将关闭文件句柄并将一切恢复到之前的状态。如果 inp 未保存而被丢弃,则任何更改也将被丢弃,但在这种情况下,任何错误都将静默忽略。

依赖项

~2–10MB
~110K SLoC