2014-12-14 3 views
6

Als ich zum ersten Mal in Rust eintauchte, begann ich Code zu schreiben, um den Inhalt einer Datei für eine spätere Verarbeitung auszugeben (jetzt drucke ich sie gerade aus)Cleaner Weg, um den Inhalt einer Datei als String in Rust zu bekommen?

Gibt es einen Reiniger? Weg, dies zu tun, als ich derzeit bin? Es scheint, als ob ich mit etwa es viel zu ausführlich sein, aber ich bin keine gute Art und Weise zu sehen, es

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()); 
} 

Antwort

13

Read::read_to_string aufzuräumen ist die kürzeste ich kenne:

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); 
} 

Über Fehlerfälle nachzudenken ist etwas, das Rust gerne in den Vordergrund stellt.

+0

Sie sollten nicht 'unwrap' im Produktionscode verwenden. Entweder 'match',' map' oder 'and_then'. – Hauleth

+0

@ hauleth Das ist eine sehr strenge Aussage. Machen Sie den gleichen Anspruch für "Panik", "unerreichbar" oder "behaupten"? All dies erzeugt eine Thread-Panik. Es gibt viele Gründe, im Produktionscode zu "Panik" zu kommen. Konkret würde ich sagen, dass ** logische Fehler ** * eine Panik auslösen sollten, wenn sie auftreten. Natürlich ist dieses Beispiel kein Produktionscode, und die Behandlung von Fehlerfällen ist Sache des Benutzers des Beispiels und des Kontextes dieser Anwendung. – Shepmaster

+0

IMHO ja. Sie sollten alle von ihnen vermeiden, wenn Sie können. Persönlich verwende ich sie nur, wenn ich sicher bin, dass dies nicht in Panik geraten wird (d. H. "FromPrimitive" auf Konstanten). Wenn ich in Panik geraten muss, sollte es in "main" passieren. In Bibliotheken sollten Sie 'Result' oder' Option' zurückgeben, oder 'log'kate, falls es nicht fatal ist. – Hauleth

Verwandte Themen