一、基本點
1、“/a”和“./a”的區別
/a是起始目錄是指當前工作文件夾的父目錄,a爲子目錄;./a是指:起始目錄爲當前工作文件夾,a爲子目錄。
2、 a/b
和 a//b
相同,都由 a
and b
組成.
3、 a/./b
, a/b/
, a/b/.
anda/b
都有 a
and b
組成;但是 ./a/b
的起始目錄是當前目錄。
4、 /a/b
and /a/b/
相同
5、a/c
和 a/b/../c
完全不同
6、“/”和 “ \\ ”: 等價
二、join、with_file_name
// 注意with_file_name,會覆蓋前面的join.但前面join中,有“.,/”結尾部分,不會補覆蓋。
let path0_0 = Path::new("./history_md_data").join("stock/").with_file_name("510050.XSHG.csv");
//path0_0 => "./history_md_data\\510050.XSHG.csv"
let path0_1 = Path::new("./history_md_data").join("stock").with_file_name("510050.XSHG.csv");
//path0_1 => "./history_md_data\\510050.XSHG.csv"
let path0_2 = Path::new("./history_md_data").join("/stock/").with_file_name("510050.XSHG.csv");
//path0_2 => "/510050.XSHG.csv"
let path0_3 = Path::new("/history_md_data").join("stock/").with_file_name("510050.XSHG.csv");
//path0_3 => "/history_md_data\\510050.XSHG.csv"
let path0_4 = Path::new("/history_md_data").join("/stock").with_file_name("510050.XSHG.csv");
//path0_4 => "/510050.XSHG.csv"
let path0_5 = Path::new("/history_md_data").join("/stock/").with_file_name("510050.XSHG.csv");
//path0_5 => "/510050.XSHG.csv"
println!("path0_0 => {:?}",path0_0);
println!("path0_1 => {:?}",path0_1);
println!("path0_2 => {:?}",path0_2);
println!("path0_3 => {:?}",path0_3);
println!("path0_4 => {:?}",path0_4);
println!("path0_5 => {:?}",path0_5);
// join:
let path1_0 = Path::new("./history_md_data").join("stock/").join("510050.XSHG.csv");
let path1_1 = Path::new("./history_md_data").join("stock").join("510050.XSHG.csv");
let path1_2 = Path::new("./history_md_data").join("/stock/").join("510050.XSHG.csv");
//path1_2 => "/stock/510050.XSHG.csv",注意有覆蓋
let path1_3 = Path::new("/history_md_data").join("stock/").join("510050.XSHG.csv");
let path1_4 = Path::new("/history_md_data").join("/stock").join("510050.XSHG.csv");
let path1_5 = Path::new("/history_md_data").join("/stock/").join("510050.XSHG.csv");
println!("------------------");
println!("path1_0 => {:?}",path1_0);
println!("path1_1 => {:?}",path1_1);
println!("path1_2 => {:?}",path1_2);
println!("path1_3 => {:?}",path1_3);
println!("path1_4 => {:?}",path1_4);
println!("path1_5 => {:?}",path1_5);
println!("------------------");
let path3_1 = Path::new("/history_md_data").with_file_name("510050.XSHG.csv");
println!("path3_1:=>{:?}",path3_1);
let path3_2 = Path::new("/history_md_data/stock/510050.XSHG.csv");
println!("path3_2:=>{:?}",path3_2);
let path2 = Path::new("./history_md_data/stock/510050.XSHG.csv");
println!("path2:=>{:?}",path2);
let parents = path2.parent().unwrap();
println!("path2 parent:{:?}",parents);
println!("path2 相關信息");
let is_ex = parents.exists() ;
println!("path2 的parents是否存在:{:?}",is_ex);
let is_f = path2.is_file();
println!("path2 是否是文件:{:?}",is_f);
let is_r = path2.is_relative();
println!("path2是相對路徑:{:?}",is_r);
let is_a = path2.is_absolute();
println!("path2是絕對路徑:{:?}",is_a);
let is_d = parents.is_dir();
println!("path2的parents 是目錄文件:{:?}",is_d);
let home_path = env::current_dir().unwrap();
println!("當前目錄是:{:?}",home_path);
//列出相關目錄下文件
let paths = fs::read_dir("./").unwrap();
for path in paths {
println!("Name: {}", path.unwrap().path().display())
}
輸出:
path0_0 => "./history_md_data\\510050.XSHG.csv"
path0_1 => "./history_md_data\\510050.XSHG.csv"
path0_2 => "/510050.XSHG.csv"
path0_3 => "/history_md_data\\510050.XSHG.csv"
path0_4 => "/510050.XSHG.csv"
path0_5 => "/510050.XSHG.csv"
------------------
path1_0 => "./history_md_data\\stock/510050.XSHG.csv"
path1_1 => "./history_md_data\\stock\\510050.XSHG.csv"
path1_2 => "/stock/510050.XSHG.csv"
path1_3 => "/history_md_data\\stock/510050.XSHG.csv"
path1_4 => "/stock\\510050.XSHG.csv"
path1_5 => "/stock/510050.XSHG.csv"
------------------
path3_1:=>"/510050.XSHG.csv"
path3_2:=>"/history_md_data/stock/510050.XSHG.csv"
path2:=>"./history_md_data/stock/510050.XSHG.csv"
path2 parent:"./history_md_data/stock"
path2 相關信息
path2 的parents是否存在:true
path2 是否是文件:true
path2是相對路徑:true
path2是絕對路徑:false
path2的parents 是目錄文件:true
當前目錄是:"D:\\my_test"
use std::path::{Component, Path};
let path = Path::new("/tmp/foo/bar.txt");
let components = path.components().collect::<Vec<_>>();
assert_eq!(&components, &[
Component::RootDir,
Component::Normal("tmp".as_ref()),
Component::Normal("foo".as_ref()),
Component::Normal("bar.txt".as_ref()),
]);
列出home_dir下所有的文件和目錄,但不會列出目錄下的目錄,不會進行遞歸操作。
三、幾個不同點
1、 "/"和“\”是否等同?
{
println!("/和\\是否相同?");
let path2 = Path::new("./history_md_data/stock/510050.XSHG.csv");
println!("path2: {:?} ",path2);
let path1_0 = Path::new("./history_md_data").join("stock/").join("510050.XSHG.csv");
println!("path_1_0 : {:?} ",path1_0);
println!("path2 ==path_1_0 :{:?}" ,path2 == path1_0);
}
輸出:
/和\是否相同?
path2: "./history_md_data/stock/510050.XSHG.csv"
path_1_0 : "./history_md_data\\stock/510050.XSHG.csv"
path2 ==path_1_0 :true
2、關於create_dir_all 和create_dir
create_dir_all:適用於不管/a/b/c/d這一個目錄路徑在不在,都 可以,缺少,就創建;
create_dir: 只適用於當且僅當父目錄存在的情況,如果父目錄不存在,就會報錯。