跳转至

文件和IO

Rust 通过在std::io模块中的几个核心特性(trait)来定义 I/O 功能,使得 I/O 操作可以在不同类型的数据流上以统一的方式执行:

  • Read 特性:用于定义从数据源读取数据的功能。实现了 Read 的类型可以从底层数据源(如文件、网络、内存缓冲区等)读取数据。
  • Write 特性:用于定义向数据接收器写入数据的功能。实现了 Write 的类型可以向各种输出流(如文件、网络、内存缓冲区等)写入数据。
  • Seek 特性:用于在支持随机访问的数据流中移动读写位置。
  • BufRead 特性:基于 Read,为缓冲的读操作提供接口。

文件读写

下面这个例子是一个典型的Rust读写文件程序:

  1. 通过createopen打开文件,利用文件的Drop方法自动释放。
  2. 通过BufWriterBufReader包装,给读写添加缓冲。
  3. 引入WriteRead特性,调用相关方法完成读写。
  4. 使用?来处理可能发生的错误。
use std::fs::File;
use std::io::{BufReader, BufWriter, Write, Read};

fn main() -> std::io::Result<()> {
    // Buffered writing
    let file = File::create("output.txt")?;
    let mut writer = BufWriter::new(file);
    writer.write_all(b"Hello, buffered world!")?;

    // Buffered reading
    let file = File::open("output.txt")?;
    let mut reader = BufReader::new(file);
    let mut contents = String::new();
    reader.read_to_string(&mut contents)?;
    println!("File contents: {}", contents);

    Ok(())
}