Rust 文件系统操作:实践指南
\n\nRust 是一种现代系统编程语言,兼具高性能和内存安全性。每个开发者都会遇到的关键任务之一是文件系统操作。在本文中,我们将通过实际示例,讲解如何在 Rust 中读写文件、创建目录、处理错误以及执行其他文件系统操作。
\n\n文件系统操作的核心模块
\n\n在 Rust 中,所有文件系统操作都集中在标准库中。核心模块包括:
\n\n- \n
std::fs— 用于文件和目录操作的函数(读取、写入、创建、删除)。 \n std::path— 路径操作(Path、PathBuf)。 \n std::io— 输入/输出,包括Read和Writetrait。 \n
开始使用前,只需导入所需模块:
\n\nuse std::fs;\nuse std::path::Path;\nuse std::io::prelude::*;\nuse std::fs::File;\n\n在 Rust 中读取文件
\n\n读取整个文件最简单的方法是使用 fs::read_to_string 函数。它返回 Result<String>,方便进行错误处理。
use std::fs;\n\nfn main() {\n let file_path = "example.txt";\n \n match fs::read_to_string(file_path) {\n Ok(content) => println!("文件内容:\\n{}", content),\n Err(e) => eprintln!("读取文件错误:{}", e),\n }\n}\n\n如果需要逐行读取文件(例如处理大文件),请使用 BufReader:
use std::fs::File;\nuse std::io::{BufRead, BufReader};\n\nfn main() {\n let file = File::open("example.txt").expect("无法打开文件");\n let reader = BufReader::new(file);\n\n for line in reader.lines() {\n match line {\n Ok(content) => println!("{}", content),\n Err(e) => eprintln!("读取行错误:{}", e),\n }\n }\n}\n\n向文件写入数据
\n\n向文件写入数据时,可以使用 fs::write(简单写入字符串)或 File::create 配合 write! 或 writeln! 进行写入。
use std::fs;\n\nfn main() {\n let content = "你好,世界!\\n这是要写入的字符串。";\n fs::write("output.txt", content).expect("写入文件错误");\n println!("文件写入成功");\n}\n\n对于顺序写入或追加数据,请使用 OpenOptions:
use std::fs::OpenOptions;\nuse std::io::Write;\n\nfn main() {\n let mut file = OpenOptions::new()\n .append(true) // 追加到文件\n .create(true) // 如果不存在则创建\n .open("log.txt")\n .expect("无法打开文件");\n\n writeln!(file, "日志记录:{}", chrono::Local::now()).expect("写入错误");\n}\n\n目录和路径操作
\n\nRust 提供了便捷的工具来创建、删除和遍历目录。下面介绍基本操作。
\n\n创建和删除目录
\n\nuse std::fs;\n\nfn main() {\n // 创建单个目录\n fs::create_dir("new_folder").expect("创建目录错误");\n \n // 创建嵌套目录(类似 mkdir -p)\n fs::create_dir_all("parent/child/grandchild").expect("创建嵌套目录错误");\n \n // 删除空目录\n fs::remove_dir("new_folder").expect("删除目录错误");\n \n // 删除目录及其所有内容\n fs::remove_dir_all("parent").expect("删除目录及其内容错误");\n}\n\n遍历目录内容
\n\n要获取文件列表