如何从std :: io :: Error获取消息字符串?

时间:2018-03-17 16:15:34

标签: rust

这有效:

format!("{:?}", error)) 
// Os { code: 13, kind: PermissionDenied, message: "Permission denied" }

但我只想要message字段,而不是完整的调试打印。我怎么得到它?

error.message // unknown field
error.message() // no method named `message` found for type `std::io::Error` in the current scope

1 个答案:

答案 0 :(得分:3)

我认为没有什么东西会让你准确到达"许可被拒绝"。我所知道的最近的是Display的{​​{1}}实现,它仍包含基础错误代码:

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 }

标准库从error.to_string()获取此字符串,该字符串根据平台进行定义。例如,on UNIX-like platforms, it uses strerror_r。但是,此功能似乎没有以任何公开方式公开。