包龙星

有为,去把戚家的账本(file.txt)给我偷...啊不,取来!我要通读全文!

包有为

十三叔,这账本锁在柜子里,我得先 Open,然后 Read,最后还得记得 Close(Drop)!

Rust 文件与 IO:查账秘籍

Rust 标准库提供了 std::fs 模块来处理文件系统操作。

📖 读取整个文件

最简单的方法是一次性把文件读成字符串。

use std::fs;

fn main() {
    // 可能会失败,所以返回 Result
    let content = fs::read_to_string("account_book.txt")
        .expect("读不出来啊!");
        
    println!("账本内容:\n{}", content);
}

✍️ 写入文件

创建一个新文件并写入数据。

use std::fs::File;
use std::io::Write;

fn main() {
    let mut file = File::create("verdict.txt").unwrap();
    file.write_all(b"Guilty!").unwrap();
}

🕵️ 逐行读取 (BufReader)

如果账本太厚(文件太大),不要一次读完,要用缓冲区逐行读。

use std::fs::File;
use std::io::{BufRead, BufReader};

fn main() {
    let file = File::open("account_book.txt").unwrap();
    let reader = BufReader::new(file);

    for line in reader.lines() {
        println!("{}", line.unwrap());
    }
}

🔓 OpenOptions (高级打开方式)

File::open 只读,File::create 只写且覆盖。如果你想玩点花样(比如追加、读写同时),就要用 OpenOptions

use std::fs::OpenOptions;

fn main() {
    let file = OpenOptions::new()
        .read(true)      // 允许读取
        .write(true)     // 允许写入
        .create(true)    // 如果文件不存在就创建
        .append(true)    // 追加模式 (不会覆盖原内容)
        // .truncate(true) // 清空文件 (慎用!)
        .open("log.txt");
}

常用选项:

📓

动手时刻:伪造账本

编写一个程序来修改文件。

  1. 创建(写入)一个文件 secret.txt,内容是 "常威不会武功"。
  2. 读取这个文件,打印内容。
  3. 使用追加模式,在文件末尾加上 ",根本就是天生神力"。
  4. 再次读取并打印,确认修改成功。
查看参考答案 (点击揭榜)

use std::fs::{self, OpenOptions};
use std::io::Write;

fn main() {
    // 1. 创建并写入
    fs::write("secret.txt", "常威不会武功").unwrap();
    
    // 2. 读取
    println!("原版: {}", fs::read_to_string("secret.txt").unwrap());
    
    // 3. 追加
    let mut file = OpenOptions::new()
        .append(true)
        .open("secret.txt")
        .unwrap();
    write!(file, ",根本就是天生神力").unwrap();
    
    // 4. 再次读取
    println!("篡改后: {}", fs::read_to_string("secret.txt").unwrap());
}
                    

成就解锁:【做账高手】 🤫