在Rust中`mktemp`箱子的行为不一致

时间:2018-02-21 05:00:29

标签: rust

如果我在.to_path_buf()之后立即调用expect,则不会创建临时目录。这是一个bug还是Rust功能?

extern crate mktemp;                                                                                                                                                                                        

use std::path::Path;                                                                                                                                                                                        

fn main() {                                                                                                                                                                                                 
    let temp_dir = mktemp::Temp::new_dir().expect("Failed to create a temp directory");                                                                                                                     
    let temp_dir_path = temp_dir.to_path_buf();                                                                                                                                                             
    println!("tmp path exists: {}", Path::exists(&temp_dir_path));                                                                                                                                          

    let temp_dir_path = mktemp::Temp::new_dir().expect("Failed to create a temp directory").to_path_buf();                                                                                                  
    println!("tmp path exists: {}", Path::exists(&temp_dir_path));                                                                                                                                          
}

哪个输出:

tmp path exists: true
tmp path exists: false

1 个答案:

答案 0 :(得分:9)

我不知道,但我想知道the mktemp documentation中是否有关于此事的内容......

  

一旦变量超出范围,就会删除基础文件系统资源。

您没有将Temp存储在变量中,因此它会立即超出范围。它正在创建目录,然后立即销毁它。