Rust 将当前目录中的所有文件内容读取到向量
我想读取当前目录中的所有文件 以下是我的进展:Rust 将当前目录中的所有文件内容读取到向量,rust,Rust,我想读取当前目录中的所有文件 以下是我的进展: 使用std::fs; fn main(){ 让files=fs::read_dir(“.”).unwrap(); 文件夹 .filter_映射(结果::ok) .filter(| d | if let Some(e)=d.path().extension(){e==“txt”}else{false}) .对于每一个(| f | println!(“{:?}”,f)); } 这里我有点迷路了,我怎么能读取所有的文件内容?我是否应该将它们添加到每个块
使用std::fs;
fn main(){
让files=fs::read_dir(“.”).unwrap();
文件夹
.filter_映射(结果::ok)
.filter(| d | if let Some(e)=d.path().extension(){e==“txt”}else{false})
.对于每一个(| f | println!(“{:?}”,f));
}
这里我有点迷路了,我怎么能读取所有的文件内容?我是否应该将它们添加到每个块的
中不断增长的Vec
?如果是,那么如何使用?如果您想要一个包含所有文件字节的单个vec,您可以使用
let target_ext = OsString::from("txt");
let files = fs::read_dir(".").unwrap();
let file_bytes : Vec<u8> = files
.filter_map(Result::ok)
.map(|d| d.path())
.filter(|path| path.extension() == Some(&target_ext))
.flat_map(|path| fs::read(path).expect("Failed to read"))
.collect();
您想将
中每个文件的字节内容以任意顺序(无论read\u dir
给您什么顺序)读入平面Vec
?或者您希望它具有某种结构,例如跟踪哪些内容与哪个文件名匹配?另请参见:flat\u map
ping一个Vec
的迭代器将复制所有文件内容至少两次,并对分配器造成很大影响。最好对每个
使用,并将每个文件读入一个Vec
。另外,当您不知道Vec
对应的文件时,Vec
对我来说并不是非常有用;我会选择一个HashMap
之类的东西(但是如果OP能够澄清所需的结果会更好)。
let file_bytes : Vec<Vec<u8>> = files
.filter_map(Result::ok)
.map(|d| d.path())
.filter(|path| path.extension() == Some(&target_ext))
.map(|path| fs::read(path).expect("Failed to read"))
.collect();