【发布时间】:2015-08-28 08:14:26
【问题描述】:
我想读取一个文件并取回Strings 的向量。以下函数有效,但有没有更简洁或惯用的方式?
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
}
一些对我来说似乎不是最理想的事情:
- 两个单独的错误检查用于读取文件。
- 将整个文件读取到
String,该文件将被丢弃。如果我只想要前 N 行,这将特别浪费。 - 每行创建一个
&str,这将被丢弃,而不是以某种方式直接从文件到每行一个String。
如何改进?
【问题讨论】:
-
我不明白为什么这个问题被否决了。如果它被认为过于主观,我建议删除
idiomatic标签,因为它准确地描述了我要问的事情。