#io #traits #writers #file #extension #drop #close

io-close

一个用于安全释放 I/O 写入器(如 File 和 BufWriter)的扩展特质

22 个版本

0.3.7 2021 年 4 月 3 日
0.3.6 2021 年 4 月 2 日
0.3.3 2021 年 1 月 1 日
0.3.1 2020 年 12 月 2 日
0.1.9 2020 年 11 月 22 日

#761 in Rust 模式

Download history 28848/week @ 2024-03-14 29170/week @ 2024-03-21 24657/week @ 2024-03-28 26987/week @ 2024-04-04 26794/week @ 2024-04-11 27935/week @ 2024-04-18 28473/week @ 2024-04-25 27966/week @ 2024-05-02 27637/week @ 2024-05-09 26243/week @ 2024-05-16 27168/week @ 2024-05-23 27208/week @ 2024-05-30 27261/week @ 2024-06-06 33183/week @ 2024-06-13 29943/week @ 2024-06-20 22706/week @ 2024-06-27

118,258 每月下载量
用于 62 个 crate(4 个直接使用)

MIT/Apache

12KB
154

请参阅 https://docs.rs/io-close.


lib.rs:

这是一个用于安全释放 I/O 写入器(如 FileBufWriter)的扩展特质。具体来说,它用于可能包含资源句柄(如原始文件描述符)的 I/O 写入器,在释放时自动关闭此句柄可能产生不可见的 I/O 错误。使用此特质(称为 Close)可以查看并处理这些错误。

在 Linux 上 close(2) 的 man 页面 有以下说明

不检查 close() 的返回值是一个常见但仍然严重的编程错误。完全有可能在先前的 write(2) 操作中报告错误,并在最后的 close() 中首先报告。在关闭文件时不检查返回值可能导致数据丢失,这在 NFS 和磁盘配额中尤其明显。

为大多数标准库 I/O 写入器以及(可选)一些在外部 crate 中定义的 I/O 写入器提供了 Close 的实现。

BufWriter 示例

use std::io::{BufWriter, Result, Write};
use io_close::Close;

fn main() -> Result<()> {
    let data = b"hello world";
    let mut buffer = BufWriter::new(tempfile::tempfile()?);
    buffer.write_all(data)?;
    buffer.close()?; // safely drop buffer and its contained File
    Ok(())
}

可选实现

为以下在外部 crate 中定义的 I/O 写入器提供了 Close 的可选实现,通过 cargo 功能启用

依赖项

~225KB