如何正确阅读文本文件?

时间:2014-09-08 11:04:22

标签: io rust

锈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()'的情况下阅读? 细节 细节 细节 细节 细节 细节 细节 细节

1 个答案:

答案 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或者不是内部的。)