1月 22, 2024 LaGee
read_dir概述
read_dir被分賴在fs裡面
主要判斷路徑內有哪些文件
並且以此為基礎去操作
文件這樣解釋
pub fn read_dir<P: AsRef<Path>>(path: P) -> Result<ReadDir>
輸入一個路徑
回傳Result,Result包著一個迭代器ReadDir[2]
迭代器內部則是Result<DirEntry, error>
也就是出現兩層Result
解釋起來有點饒口
舉個例子大概長這樣
use std::fs;
fn main() {
let dir_path = "src";
if let Ok(entries) = fs::read_dir(dir_path) {
for entry in entries {
let entry_ = entry.unwrap();
println!("{:?}", entry.path());
}
}
}
"src\\build.rs"
"src\\handler.rs"
"src\\lib.rs"
"src\\main.rs" 設定路徑dir_path
使用read_dir將路徑內的文件資料放入entries迭代器中
透過for entry迭代entries裡面的東西
再把entry unwrap可以得到DirEntry[3],放入entry_裡面
此時就可以對這個文件操作
例如我想要獲得這個路徑
就是直接.path()輸出就好
pub struct DirEntry(/* private fields */);
DirEntry為ReadDir迭代器中的元素結構
可以檢查文件的屬性
常見的例如
pub fn path(&self) -> PathBuf
path為獲得文件路徑
pub fn file_name(&self) -> OsString
file_name可以獲得檔案的名稱
fn main() {
let dir_path = "src";
if let Ok(entries) = fs::read_dir(dir_path) {
for entry in entries {
let entry = entry.unwrap();
println!("{:?}", entry.file_name());
}
}
}
"build.rs"
"handler.rs"
"lib.rs"
"main.rs"
pub fn metadata(&self) -> Result<Metadata>
metadata可以知道資料的資訊
例如可以知道是否為檔案、是否為資料夾、最後修改時間等等
use std::fs;
fn main() {
let dir_path = "src";
if let Ok(entries) = fs::read_dir(dir_path) {
for entry in entries {
let entry = entry.unwrap();
let metadata = entry.metadata().unwrap();
println!("is dir: {:?}, last modified: {:?}",
metadata.is_dir(), metadata.modified());
}
}
}
is dir: false, last modified: Ok(SystemTime { intervals: 133504035161114808 })
is dir: false, last modified: Ok(SystemTime { intervals: 133504035348568046 })
is dir: false, last modified: Ok(SystemTime { intervals: 133504035212331473 })
is dir: false, last modified: Ok(SystemTime { intervals: 133504051360968232 })
參考資料
[1] https://doc.rust-lang.org/std/fs/fn.read_dir.html
[2] https://doc.rust-lang.org/std/fs/struct.ReadDir.html
[3] https://doc.rust-lang.org/std/fs/struct.DirEntry.html
[4] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.path
[5] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.file_name
[6] https://doc.rust-lang.org/std/fs/struct.DirEntry.html#method.metadata
0 comments:
張貼留言