我试图读入一个文件,直到结束2字节的时间,我想捕捉EOF错误:
use byteorder::{BigEndian, ReadBytesExt}; // 1.3.4
use std::fs::File;
fn main() {
let filename = "/etc/hosts";
let mut file = File::open(filename).expect("Cannot open file");
loop {
let binary = match file.read_u16::<BigEndian>() {
Ok(binary) => binary,
Err(e) => panic!("Can't read from file: {}, err {}", filename, e),
// Can I catch the EOF error here?
};
println!("{:?}", binary);
}
}
5条答案
按热度按时间cl25kdpy1#
这在Rust 1.17.0版(可能回到Rust 1.0)中有效:
lstz6jyr2#
我发现...
......要比......更具可读性。
(我不确定我们还能得到什么其他错误......)
在其他情况下,匹配守卫可能不一样--就像我们重复
e.kind()
一样--我们不能使用嵌套的match
。此功能适用于 rust 1.25。
31moq8wy3#
编者按:此代码示例来自Rust 1.0之前的版本,不适用于稳定的Rust 1.0
io::Error
。嵌套模式匹配的 * 概念 * 仍然适用于其他上下文中。您可以使用模式匹配的一些更高级的特性来匹配作为模式一部分的种类:
第一个变量意味着"一个
Err
包含一个IoError
,其中kind
是IoErrorKind::EndOfFile
,所有其他字段都是你喜欢的"。第二个变量则意味着"任何其他Err
,将包含的值绑定到变量名e
"。py49o6xq4#
我想通了。我改了这行来检查错误类型!希望这对其他人有帮助。
3xiyfsfu5#
下面是匹配MySQL
IoError
的示例: