Rust 文件系统操作:实用指南

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

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

开始课程

Rust 文件系统操作:实践指南

\n\n

Rust 是一种现代系统编程语言,兼具高性能和内存安全性。每个开发者都会遇到的关键任务之一是文件系统操作。在本文中,我们将通过实际示例,讲解如何在 Rust 中读写文件、创建目录、处理错误以及执行其他文件系统操作。

\n\n

文件系统操作的核心模块

\n\n

在 Rust 中,所有文件系统操作都集中在标准库中。核心模块包括:

\n\n
    \n
  • std::fs — 用于文件和目录操作的函数(读取、写入、创建、删除)。
  • \n
  • std::path — 路径操作(Path、PathBuf)。
  • \n
  • std::io — 输入/输出,包括 Read 和 Write trait。
  • \n
\n\n

开始使用前,只需导入所需模块:

\n\n
use 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>,方便进行错误处理。

\n\n
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:

\n\n
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! 进行写入。

\n\n
use std::fs;\n\nfn main() {\n    let content = "你好,世界!\\n这是要写入的字符串。";\n    fs::write("output.txt", content).expect("写入文件错误");\n    println!("文件写入成功");\n}
\n\n

对于顺序写入或追加数据,请使用 OpenOptions:

\n\n
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\n

Rust 提供了便捷的工具来创建、删除和遍历目录。下面介绍基本操作。

\n\n

创建和删除目录

\n\n
use 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

要获取文件列表

博客

书籍推荐