Skip to content

文件读写

打开文件

rust
let file = std::fs::File::open("data.txt").unwrap();
println!("open file done: {:?}", file);
bash
open file done: File { fd: 3, path: "/Users/thomas/Desktop/firstrust/data.txt", read: true, write: false }
bash
# 文件不存在
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
bash
# chmod -r data.txt
called `Result::unwrap()` on an `Err` value: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }

创建文件

rust
let file = std::fs::File::create("data.txt").unwrap();
println!("create file done: {:?}", file);
bash
create file done: File { fd: 3, path: "/Users/thomas/Desktop/firstrust/data.txt", read: false, write: true }
bash
# chmod -w data.txt
called `Result::unwrap()` on an `Err` value: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
bash
# "data.txt" --> "void/data.txt"
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }

写文件

rust
use std::io::Write;

fn main() {
    let mut file = std::fs::File::create("data.txt").expect("create failed");
    file.write_all("hello".as_bytes()).expect("write failed");
    file.write_all("\nworld".as_bytes()).expect("write failed");
    println!("Wrote to file!")
}

读文件

rust
use std::io::Read;

fn main() {
    let mut file = std::fs::File::open("data.txt").expect("open failed");
    let mut contents = String::new();
    file.read_to_string(&mut contents).expect("read failed");
    println!("{}", contents);
}
bash
hello
world
bash
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
bash
# 生成一个512字节的二进制文件
# dd if=/dev/urandom of=data.txt bs=512 count=1
read failed: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }
bash
open failed: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }

追加内容到文件末尾

rust
use std::fs::OpenOptions;
use std::io::Write;

fn main() {
    let mut file = OpenOptions::new().append(true).open("data.txt").expect("open failed");
    file.write_all(b"Hello, world!").unwrap();
    file.write_all("\nhello again!".as_bytes()).unwrap();
    println!("append to file.")
}

删除文件

rust
fn main() {
    std::fs::remove_file("data.txt").unwrap();
    println!("File deleted!")
}

复制文件

rust
use std::fs;
use std::io;

fn main() -> io::Result<()> {
    let source = "source_file.txt"; // 源文件路径
    let destination = "destination_file.txt"; // 目标文件路径

    // 使用 fs::copy 函数复制文件
    fs::copy(source, destination)?;

    println!("文件已成功复制!");

    Ok(())
}
bash
文件已成功复制!
bash
Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }
rust
use std::fs;

fn main() {
    let source = "source_file.txt";
    let destination = "destination_file.txt";

    match fs::copy(source, destination) {
        Ok(_) => println!("文件已成功复制!"),
        Err(e) => eprintln!("文件复制失败: {}", e),
    }
}

查找文件

rust
use std::fs;

fn main() -> std::io::Result<()> {
    // 指定要查找的目录
    let dir = "/etc/nginx/conf.d/";

    // 读取目录中的所有条目
    let entries = fs::read_dir(dir)?;

    // 遍历所有条目,过滤出 .conf 文件
    for entry in entries {
        let entry = entry?;
        let path = entry.path();

        if path.is_file() && path.extension().map_or(false, |ext| ext == "conf") {
            println!("{:?}", path);
        }
    }

    Ok(())
}

人生感悟