首页 > 解决方案 > 使用 rust 将文件名收集到向量中时,借用值的寿命不够长

问题描述

我不熟悉 rust 并试图将文件收集到字符串向量中。

use glob::glob;
use std::env;

fn main() {
    let mut file_names: Vec<&str> = Vec::new();

    let cwd = env::current_dir().unwrap();

    for entry in glob(cwd.to_str().unwrap()).expect("Failed to read directory.") {
        match entry {
            Ok(file) => {
                println!("{:?}", file.file_name());
                let file_name = file.file_name().unwrap().to_str();
                file_names.push(file_name.unwrap());
            }
            Err(e) => println!("{:?}", e),
        }
    }
}

收到以下错误。

error[E0597]: `file` does not live long enough
  --> src/main.rs:13:33
   |
13 |                 let file_name = file.file_name().unwrap().to_str();
   |                                 ^^^^ borrowed value does not live long enough
14 |                 file_names.push(file_name.unwrap());
   |                 ---------- borrow later used here
15 |             }
16 |             Err(e) => println!("{:?}", e),
   |               - `file` dropped here while still borrowed

error: aborting due to previous error

我不确定如何将文件名推送到向量中。谢谢!

标签: rust

解决方案


感谢@PeterHall,这是更正的代码。

use glob::glob;
use std::env;

fn main() {
    let mut file_names: Vec<String> = Vec::new();

    let cwd = env::current_dir().unwrap();

    for entry in glob(cwd.to_str().unwrap()).expect("Failed to read logs directory.") {
        match entry {
            Ok(file) => {
                println!("{:?}", file.file_name());
                let file_name = file.file_name().unwrap().to_str().unwrap();
                file_names.push(file_name.to_string());
            }
            Err(e) => println!("{:?}", e),
        }
    }

    for file_name in file_names {
        println!("{:?}", file_name);
    }
}

推荐阅读