面试题答案
一键面试// 定义自定义错误类型
#[derive(Debug)]
enum MyError {
FileNotFound,
PermissionDenied,
}
// 读取文件内容的函数
fn read_file(file_path: &str) -> Result<String, MyError> {
if std::path::Path::new(file_path).exists() {
if std::fs::metadata(file_path).map_err(|_| MyError::PermissionDenied)?.permissions().readonly() {
return Err(MyError::PermissionDenied);
}
std::fs::read_to_string(file_path).map_err(|_| MyError::FileNotFound)
} else {
Err(MyError::FileNotFound)
}
}
fn main() {
let file_path = "nonexistent_file.txt";
match read_file(file_path) {
Ok(content) => println!("File content: {}", content),
Err(err) => match err {
MyError::FileNotFound => println!("The file was not found."),
MyError::PermissionDenied => println!("Permission denied for the file."),
},
}
}
在上述代码中:
- 首先定义了自定义错误类型
MyError
,它有两个变体FileNotFound
和PermissionDenied
。 read_file
函数接收一个文件路径作为参数,根据文件是否存在以及权限情况返回不同的错误,若成功读取文件则返回文件内容。- 在
main
函数中调用read_file
,通过match
语句处理不同的错误情况。