关于生命周期的一个具体问题

起因

需要便利目录中的文件,并将其文件名称及文件大小缓存在Hashmap中

部分代码

代码中使用了三方包为:
walkdir = {version = “2.3.2”}

let mut file_len_map = HashMap::new();
for  walk_step  in  WalkDir::new(&args.watch_path)
    .into_iter()
    .filter_map(|e| e.ok())
{
    // 此处walk_step.path();出现了生命周期异常
    let  file_path  =  walk_step.path();
    let  file_len  =  OpenOptions::new()
        .read(true)
        .open(file_path.clone())
        .unwrap()
        .metadata()
        .unwrap()
        .len();
    file_len_map.insert(file_path.clone(), file_len);
}
println!("{:?}", file_len_map);
讨论数量: 1
pardon110

这样:

use std::{collections::HashMap, env::args, fs::OpenOptions};

use walkdir::WalkDir;

fn main() {
    let args: Vec<String> = args().collect();
    let mut file_len_map = HashMap::new();
    if args.len() < 2 {
        println!("Usage: {} <watch_path>", args[0]);
        return;
    }
    for walk_step in WalkDir::new(&args[1])
        .into_iter()
        .filter_map(|e| e.ok())
    {
        let file_path = walk_step.path();
        let file_len = match OpenOptions::new().read(true).open(file_path) {
            Ok(file) => file.metadata().unwrap().len(),
            Err(_) => continue, 
        };
        file_len_map.insert(file_path.to_path_buf(), file_len);
    }
    println!("{:?}", file_len_map);
}
2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!