一、Rust ?运算符
?运算符:传播错误的一种快捷方式。
-
如果Result是Ok:Ok中的值就是表达式的结果,然后继续执行程序。
-
如果Result是Err:Err就是整个函数的返回值,就像使用了return
?运算符只能用于返回Result的函数。
?运算符与main函数
-
main函数返回类型是:()
-
main函数的返回类型也可以是:Result<T,E>
-
Box是trait对象,简单理解:“任何可能的错误类型”
二、Rust读写txt文件
Rust可以对txt文件读、写、创建、添加、打开操作。
use std::fs::{self, OpenOptions};let file = OpenOptions::new().read(true).write(true).create(true).append(true).open(filepath)?;
三、Rust实例测试
main.rs
use std::fs::{self, OpenOptions};
use std::io::{BufRead, BufReader, BufWriter, Write};fn main() -> Result<(), Box<dyn std::error::Error>> {let filepath = "test1.txt";let filepath2 = "test2.txt";let str = read_file_string(filepath);println!("{:#?}", str);let vec = read_file_vec(filepath);println!("{:#?}", vec);read_file_buffer(filepath)?;write_file_buffer(filepath2)?;Ok(())
}//将整个文件作为字符串读取
fn read_file_string(filepath: &str) -> Result<String, Box<dyn std::error::Error>> {let data = fs::read_to_string(filepath)?;Ok(data)
}//将整个文件作为Vector读取
fn read_file_vec(filepath: &str) -> Result<Vec<u8>, Box<dyn std::error::Error>> {let data = fs::read(filepath)?;Ok(data)
}//BufReader按行读取
fn read_file_buffer(filepath: &str) -> Result<(), Box<dyn std::error::Error>> {let file = OpenOptions::new().read(true).open(filepath)?;let reader = BufReader::new(file);//按行读取for line in reader.lines() {let str: String = line.unwrap();println!("{}", str);}Ok(())
}//BufWriter带缓冲写入
fn write_file_buffer(filepath: &str) -> Result<(), Box<dyn std::error::Error>> {let file = OpenOptions::new().create(true).append(true).open(filepath)?;let mut reader = BufWriter::new(file);// 带缓冲写入reader.write(b"hello\n")?;reader.write(b"word\n")?;//确保缓冲中的内容全部写入文件reader.flush()?;Ok(())
}
其中test1.txt文件内容如下:
白日依山尽,
黄河入海流。
运行效果如下:
生成的test2.txt文件,内容如下:
hello
word