文件结构
在Rust中,std::fs::File 结构体代表一个文件。它允许我们对文件执行读/写操作。文件 I/O 是通过提供与文件系统交互的功能的 std::fs 模块执行的。
File 结构体中的所有方法都返回std::io::Result的变体,或者简单地是 Result 枚举。这里会涉及到Rust中文件几个基本操作:
- 打开文件
- 从文件读取
- 写入文件
- 删除文件
- 追加到文件
打开文件
在Rust中,可以使用File::open()方法来打开一个指定文件,函数接收一个文件路径作为参数并返回一个文件对象,如果文件不存在,将会返回一个Err,看个例子:
use std::fs::File;fn main() {let datas = File::open("data.txt");let file_data = match datas {Ok(file) => file,Err(error) => panic!("error:{:?}", error),};println!("Data file :{:?}", file_data);
}
-  在程序顶部,我们导入模块 std::fs::File以使用文件 I/O 函数。
-  要打开一个文件,我们调用 File::open("data.txt"),该函数会读取本地文件系统中的data.txt文件。
-  open()函数返回一个Result枚举,该枚举要么返回File对象,要么返回Err。
-  然后,我们对 data_result变量进行模式匹配,如果打开文件时出现错误,就会调用panic!。如果打开文件没有错误,我们将输出File对象。
运行程序会打印读取到的文件对象,如果存在的花。

读取文件
读取文件,可以使用Rust提供的read_to_string()方法,该方法实现了std::io::Read.它会读取直到文件结束(EOF)的所有字节,并将其复制到一个可变字符串。
use std::fs::File;
use std::io::Read;
fn main() {let mut datas = File::open("data.txt").unwrap();let mut file_content = String::new();datas.read_to_string(&mut file_content).unwrap();println!("file content :{:?}", file_content);
}

-  在这里,我们导入两个模块: std::fs::File和std::io::Read用于读取文件。
-  我们首先打开文件 data.txt,并将其结果绑定到一个名为data_file的变量。
-  打开文件后,我们使用 read_to_string()方法,该方法将一个空的可变字符串file_content作为参数,并将文件data.txt的内容复制到file_content中。
文件写入
使用write()方法写入文件,该方法来自std::io::Write标准库。
use std::fs::File;
use std::io::{Read, Write};
fn main() {let mut data_file = File::create("data.txt").expect("creation failed");data_file.write("怎么样,你鸡哥厉不厉害!".as_bytes()).expect("write error");println!("写入完成!");
}

- 导入std::fs::File和std::io::Write模块来写入文件。
- 首先使用File::create("data.txt")方法创建一个名为data.txt的文件,并将其绑定到可变变量data_file。
- 创建文件后,我们使用 write() 方法向文件中写入内容。
这种方式写入文件,新的内容会将之前文件中的内容覆盖。
删除文件
use std::fs;fn main() {// Remove a filefs::remove_file("data.txt").expect("could not remove file");println!("Removed file data.txt");
}
- 导入std::fs模块来删除一个文件。
- 使用 remove_file()方法来删除文件data.txt。如果操作无法继续,我们返回一个自定义消息:在出现错误的情况下无法删除文件。
- 如果找不到文件data.txt或无法删除,将会遇到错误。
追加写入
要在Rust中以追加的模式写入文件,可以使用std::OpenOptions中的append()方法实现,看代码:
use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
fn main() {let mut data_file = OpenOptions::new().append(true).open("data.txt").expect("connot open file");data_file.write("鸡你太美!".as_bytes()).expect("write failed!");println!("文件追加成功!");
}

-  在这里导入 std::fs::OpenOptions和std::io::Write模块用于向文件追加。
-  OpenOptions::new()和append(true)方法打开文件data.txt以进行追加。
-  接下来,我们使用来自 File对象的write()方法向文件写入额外内容。
-  为了处理错误,我们将 expect()方法与自定义错误消息链接。
小结
本文使用理论加案例的方式快速学习了Rust中的文件读写相关的内容,掌握了文件处理中的读写删追等基本操作,怎么样,你坤哥厉不厉害!