2014-12-14 9 views
6

Come il mio primo tuffo in Rust in un istante, ho iniziato a scrivere il codice per scaricare il contenuto di un file in una stringa, per l'elaborazione successiva (in questo momento sto solo stampando)Modo più pulito per ottenere il contenuto di un file come stringa in Rust?

C'è un pulitore modo di fare questo di quanto lo sono attualmente? Sembra che io sto avendo essere troppo prolissa su di esso, ma io non sto vedendo un buon modo per ripulirlo

use std::io; 
use std::io::File; 
use std::os; 
use std::str; 

fn main() { 
    println!("meh"); 
    let filename = &os::args()[1]; 
    let contents = match File::open(&Path::new(filename)).read_to_end() { 
     Ok(s) => str::from_utf8(s.as_slice()).expect("this shouldn't happen").to_string(), 
     Err(e) => "".to_string(), 
    }; 
    println!("ugh {}", contents.to_string()); 
} 

risposta

13

Read::read_to_string è il più breve che io conosca:

use std::io::prelude::*; 
use std::fs::File; 

fn main() { 
    let mut file = File::open("/etc/hosts").expect("Unable to open the file"); 
    let mut contents = String::new(); 
    file.read_to_string(&mut contents).expect("Unable to read the file"); 
    println!("{}", contents); 
} 

Dover pensare ai casi di fallimento è qualcosa che a Rust piace mettere in primo piano e al centro.

+0

Non si dovrebbe usare 'unwrap' nel codice di produzione. O 'match',' map' o 'and_then'. – Hauleth

+0

@hauleth Questa è una dichiarazione molto severa. Stai facendo lo stesso reclamo per "panico", "irraggiungibile" o "asserire"? Tutti questi generano un panico del thread. Ci sono molte ragioni per "fare il panico" nel codice di produzione. Specificamente, affermerei che la codifica ** errori logici ** * dovrebbe * causare un panico quando vengono incontrati. Ovviamente, questo esempio non è codice di produzione e la gestione dei casi di errore dipende dall'utente dell'esempio e dal contesto di tale applicazione. – Shepmaster

+0

IMHO si. Dovresti evitare tutti loro se puoi. Personalmente li uso solo se sono certo che questo non andrà nel panico (cioè. FromPrimitive' sulle costanti). Se ho bisogno di andare nel panico, dovrebbe succedere in 'main'. Nelle librerie dovresti restituire 'Result' o' Option', o usare 'log' crate se non è fatale. – Hauleth

Problemi correlati