Rust 並行測試中的 TempDir 唯一性與衝突解析

4 分鐘閱讀

我的中英夾雜菜英文 🤪 反正 AI 看得懂。

密技: 「幫我把以下文字翻譯成很難的英文」
提示詞工程實務經驗顯示,使用英文輸入的表現總是比中文輸入要好,尤其是使用「很難的英文」能讓它的表現更上一層樓。
真心不騙,盡量用英文!

琳 avatar

explain rust TempDir::new(), if I run tests 並行的 and create files under TempDir::new(), will them conflict with eachother?

Felo Search avatar
Felo Search

根據搜尋結果,我將詳細分析相關問題。

Rust 的 TempDir::new() 是什麼?

TempDir::new()(或在新版 crate tempfile 中對應的 tempfile::tempdir())會在作業系統的臨時目錄下建立一個隨機命名的子目錄,並回傳一個 TempDir 實例。該目錄的特性如下:

使用範例

use tempfile::tempdir;
use std::fs::File;
use std::io::Write;

fn main() -> std::io::Result<()> {
    // 建立臨時目錄
    let dir = tempdir()?;
    // 在該目錄下建立檔案
    let file_path = dir.path().join("example.txt");
    let mut file = File::create(file_path)?;
    writeln!(file, "Hello, Rust!")?;
    // 明確關閉並檢查刪除結果
    drop(file);
    dir.close()?;
    Ok(())
}

並行測試下的衝突問題

隨機命名與唯一性

實務建議

總結來說,TempDir::new() 所產生的臨時目錄在一般並行測試情境下能保持高度唯一性,並在作用域結束時自動清理,幾乎不會互相衝突。

  1. TempDir in tempdir - Rust - Docs.rs ↩2

  2. TempDir in tempfile - Rust - Shadow ↩2