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

Ole*_*yan 6 rust

这有效:

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)

She*_*ter 6

我认为没有什么能让你完全“权限被拒绝”。我所知道的最接近的是 的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. 但是,此功能似乎并未以任何公开方式公开。