2014-09-08 3 views
0

ржавчины-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

(вы имели в виду, чтобы «подробность» повторяется много раз, фактически обеспечивая больше деталей?) – huon

ответ

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 черты (который является то, что {} Formatter звонков), и поэтому он может быть распечатан непосредственно.

(Вы можете фактически сократить этот процесс с помощью Reader.read_to_str, который читает весь читатель и проверяет, является ли это UTF-8 или не внутренне.)

Смежные вопросы