锈0.11
新手问题:
fn main() {
use std::io::File;
use std::str;
let unwrapped_data = match File::open(&Path::new("/proc/net/dev")).read_to_end() {
Ok(byte_mas) => byte_mas,
Err(why) => fail!("couldn't open: {}", why.desc),
};
println!("{}", str::from_utf8_owned(unwrapped_data));
}
输出:
./netstat
Ok(Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 1534066 17270 0 0 0 0 0 0 1534066 17270 0 0 0 0 0 0
enp2s0: 251195693 592728 0 17723 0 0 0 0 43664332 107083 0 0 0 0 0 0
)
如何在没有'Ok()'的情况下阅读? 细节 细节 细节 细节 细节 细节 细节 细节
答案 0 :(得分:0)
from_utf8_owned
有签名:
pub fn from_utf8_owned(vv: Vec<u8>) -> Result<String, Vec<u8>>
也就是说,它需要一个字节向量,并返回一个字符串(如果字节是有效的utf8序列)或原始向量(如果它们不是),因此你必须处理这个可能的错误。一种可能性是:
match str::from_utf8_owned(unwrapped_data) {
Ok(s) => println!("{}", s),
Err(_) => fail!("file was not valid UTF-8")
}
您有“工作”代码的原因是Result
实现了Show
特征({}
格式化程序调用的特性),因此可以直接打印。
(实际上你可以通过Reader.read_to_str
来缩写这个过程,它会读取整个读者并检查它是否是UTF-8或者不是内部的。)