在 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