Lesen Sie eine Datei und erhalten Sie ein Array von Zeichenfolgen

Ich möchte eine Datei lesen und einen Vektor von @ zurückbekommStrings. 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 Zeile

Wie kann das verbessert werden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage