这有效:
format!("{:?}", error))
// Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
Run Code Online (Sandbox Code Playgroud)
但我只想要message
字段,而不是完整的调试打印。我如何得到它?
error.message // unknown field
error.message() // no method named `message` found for type `std::io::Error` in the current scope
Run Code Online (Sandbox Code Playgroud)
我认为没有什么能让你完全“权限被拒绝”。我所知道的最接近的是 的Display
实现Error
,它仍然包含底层错误代码:
use std::fs::File;
use std::error::Error;
fn main() {
let error = File::open("/does-not-exist").unwrap_err();
println!("{:?}", error);
// Error { repr: Os { code: 2, message: "No such file or directory" } }
println!("{}", error);
// No such file or directory (os error 2)
println!("{}", error.description());
// entity not found
}
Run Code Online (Sandbox Code Playgroud)
如果这合适,您可以使用error.to_string()
.
标准库从 中获取此字符串sys::os
,该字符串根据平台进行定义。例如,在类 UNIX 平台上,它使用strerror_r
. 但是,此功能似乎并未以任何公开方式公开。