Lesen Sie eine Datei und erhalten Sie ein Array von Zeichenfolgen
Ich möchte eine Datei lesen und einen Vektor von @ zurückbekommString
s. Die folgende Funktion funktioniert, aber gibt es einen prägnanteren oder idiomatischeren Weg?
use std::fs::File;
use std::io::Read;
fn lines_from_file(filename: &str) -> Vec<String> {
let mut file = match File::open(filename) {
Ok(file) => file,
Err(_) => panic!("no such file"),
};
let mut file_contents = String::new();
file.read_to_string(&mut file_contents)
.ok()
.expect("failed to read!");
let lines: Vec<String> = file_contents.split("\n")
.map(|s: &str| s.to_string())
.collect();
lines
}
Einige Dinge, die mir suboptimal erscheinen:
Zwei separate Fehlerprüfungen zum Lesen der Datei.Lesen der gesamten Datei zu einemString
, das weggeworfen wird. Das wäre besonders verschwenderisch, wenn ich nur die ersten N Zeilen haben möchte.Making a&str
pro Zeile, die weggeworfen wird, anstatt irgendwie direkt von der Datei zu einem @ zu gelangString
pro ZeileWie kann das verbessert werden?