Rust 文件系统操作:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Rust 中操作文件系统:完整指南



Rust 是一种现代系统编程语言,提供了强大且安全的文件系统操作工具。凭借其严格的类型系统和所有权模型,Rust 能够避免许多与文件管理相关的错误,例如数据竞争或资源泄漏。在本文中,我们将详细讲解如何在 Rust 中执行基本的文件系统操作:创建、读取、写入、复制和删除文件及目录。所有代码示例均使用标准库 std::fs 编写。



项目准备与模块导入



首先,使用 Cargo 创建一个新项目:



cargo new file_system_democd file_system_demo


打开 src/main.rs 文件并添加以下导入:



use std::fs;use std::io::{self, Write, Read};use std::path::Path;


std::fs 模块提供了操作文件和目录的函数。std::io 包含输入/输出的 trait,而 std::path::Path 用于处理路径。



创建和写入文件



创建文件并写入数据的最简单方法是使用 fs::write 函数。它接受文件路径和内容(字节或字符串形式)。



fn main() -> io::Result<()> {    // 创建文件并写入字符串    fs::write("hello.txt", "Привет, Rust!")?;    println!("Файл создан успешно.");    Ok(())}


如果需要更多控制,可以使用 fs::File 及其 write 或 write_all 方法:



fn main() -> io::Result<()> {    let mut file = fs::File::create("data.txt")?;    file.write_all(b"Строка данных")?;    file.write_all("Еще одна строка".as_bytes())?;    Ok(())}


注意 ? 运算符——这是错误传播运算符。如果操作失败,错误将从函数中返回。



读取文件



要读取整个文件内容到字符串,请使用 fs::read_to_string:



fn main() -> io::Result<()> {    let contents = fs::read_to_string("hello.txt")?;    println!("Содержимое файла:{}", contents);    Ok(())}


如果文件包含二进制数据,请使用 fs::read,它返回 Vec<u8>:



fn main() -> io::Result<()> {    let data = fs::read("image.png")?;    println!("Прочитано {} байт", data.len());    Ok(())}


对于逐行读取,使用 BufReader 会很方便:



fn main() -> io::Result<()> {    let file = fs::File::open("data.txt")?;    let reader = io::BufReader::new(file);    for line in reader.lines() {        let line = line?;        println!("{}", line);    }    Ok(())}


操作目录



创建新目录可以使用 fs::create_dir 或 fs::create_dir_all(用于嵌套路径):



fn main() -> io::Result<()> {    // 创建一个目录    fs::create_dir("my_folder")?;

// 创建嵌套目录(类似 mkdir -p) fs::create_dir_all("a/b/c")?; println!("Директории созданы."); Ok(())}


要检查文件或目录是否存在,请使用 Path::exists:



fn main() {    let path = Path::new("hello.txt");    if path.exists() {        println!("Файл существует.");    } else {        println!("Файл не найден.");    }}


获取目录内容列表可以使用 fs::read_dir:



fn main() -> io::Result<()> {    let e                

博客

书籍推荐