隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

我的相片
目前從事軟體相關行業,喜歡閱讀、健身、喝調酒。習慣把遇到的問題記下來,每天做一些整理方便自己以後查。 Python、Rust、Kotlin等程式語言皆為自學,目前比較著重在Rust語言,歡迎一起討論。

2023年12月16日 星期六

Rust 檔案操作 create_dir和create_dir_all - 根據路徑創建資料夾


如果要創建一個軟體給使用者

很多時候會不確定是不是設定的路徑資料夾使用者也有

這時候通常就會直接幫使用者創立路徑資料夾

創立資料夾有兩種方式

一種是create_dir,另一種則是create_dir_all


先看看文件這樣解釋

create_dir[1]

pub fn create_dir<P: AsRef<Path>>(path: P) -> Result<()>

輸入一個路徑

根據路徑創建一個空的資料夾

回傳Result

如果創建成功回傳Ok

會有三種失敗情況

1. 使用者對該資料夾沒有操作權

2. 該資料夾已經存在

3. 該資料夾父路徑不存在,也就是給的路徑是多個資料夾的,但他的上一層資料夾不存在,此使可以用create_dir_all創建


舉一個簡單程式示範一下

use std::fs;
fn main() {
    let path = "test";
    if !fs::metadata(path).is_ok() {
        fs::create_dir(path).unwrap();
    }
}

metadata[2]可以判斷path路徑的資訊

透過is_ok()初步判定這個資料夾是否存在

如果不存在則透過create_dir創立


create_dir_all[3]

pub fn create_dir_all<P: AsRef<Path>>(path: P) -> Result<()>

create_dir_all一樣是輸入路徑

輸出會給Result

跟create_dir不一樣的是

他可以一次把路徑內的資料夾都創建好

例如

use std::fs;
fn main() {
    let path = "test1/test2/test3/test4/test5";
    fs::create_dir_all(path).unwrap();
}

這次就不用metadata了

前面會需要主要是先判斷資料夾是否已經存在

但create_dir_all即使已經存在,也不會報panic

也不會覆蓋原本資料夾的東西

最後資料夾路徑可以長這樣



參考資料

[1] https://doc.rust-lang.org/std/fs/fn.create_dir.html

[2] https://doc.rust-lang.org/std/fs/fn.metadata.html

[3] https://doc.rust-lang.org/std/fs/fn.create_dir_all.html











0 comments:

張貼留言