3 个不稳定版本
0.2.1 | 2024 年 7 月 25 日 |
---|---|
0.2.0 | 2023 年 12 月 22 日 |
0.1.0 | 2023 年 5 月 18 日 |
#335 在 文件系统
每月 609 次下载
82KB
1.5K SLoC
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