文件结构
在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 file
fs::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
中的文件读写相关的内容,掌握了文件处理中的读写删追等基本操作,怎么样,你坤哥厉不厉害!