一、基本点
1、“/a”和“./a”的区别
/a是起始目录是指当前工作文件夹的父目录,a为子目录;./a是指:起始目录为当前工作文件夹,a为子目录。

2、 a/ba//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/ca/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下所有的文件和目录,但不会列出目录下的目录,不会进行递归操作。


路径的几部分:

let path = Path::new("/tmp/foo/bar.txt");
let parent = path.parent()//  //tmp/foo/
let file_stem = path.file_stem(); //bar
let extension = path.extension(); // txt; 不包括点.assert_eq!(Some(OsStr::new("bin")), Path::new("/usr/bin/").file_name());
assert_eq!(Some(OsStr::new("foo.txt")), Path::new("tmp/foo.txt").file_name());
assert_eq!(Some(OsStr::new("foo.txt")), Path::new("foo.txt/.").file_name());
assert_eq!(Some(OsStr::new("foo.txt")), Path::new("foo.txt/.//").file_name());
assert_eq!(None, Path::new("foo.txt/..").file_name());
assert_eq!(None, Path::new("/").file_name());

三、几个不同点

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: 只适用于当且仅当父目录存在的情况,如果父目录不存在,就会报错。

3、关于“.”
是指程序所在的工程。这里是指/my_test工程目录。

4、read_dir

read_dir:读出下一级的文件(目录),返回值是Result, 且是一个遍历文件入口的iterator,对其循还会产生io::Result实例。

5、DirEntry:

An instance of DirEntry represents an entry inside of a directory on the filesystem。

Rust: Path等相关推荐

  1. 在Rust代码中编写Python是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前,我发布了一个名为inline-python(https: ...

  2. linux rust 卸载,linux宝塔面板安装rust

    可能有些童鞋会用到rust,本文介绍下如何在linux宝塔面板环境安装rust,额,linux环境下安装都一样,不过很多人喜欢用宝塔然后搭配这些语言环境来使用. 如果你还没有宝塔看这里(宝塔服务器面板 ...

  3. Rust 每天一库系列 Ftp 库

    基础的还不是很牢固,还是写点代码比较好 FTP 作为基础还是不错的 1. First build ftp server on windows 1.1 使用 python3 ftpd 服务库 pip i ...

  4. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析

    原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...

  5. rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化

    前言 上一篇我们讲了Cargo运行测试 Cargo运行实例 Cargo工作空间 当然,Cargo也能够进行扩展,合并外部工具以增强开发体验,在设计上,其可扩展性已经达到非常丰富和恰当的程度.Cargo ...

  6. rust实战入门到进阶(1)

    1.自适应安装 (1)在Unix/Linux下,使用curl https://sh.rustup.rs -sSf | sh在Shell中运行,它自动启动安装过程:首先,下载并运行rustup-init ...

  7. golang byte转string_Golang和Rust语言常见功能/库

    时下最流行.最具发展前途的的两门语言是Golang和Rust.Golang语言简洁.高效.并发.并且有个强大的囊括了常见功能标准库.与之相对比,Rust语言则主要是安全.高性能.虽然Rust没有gol ...

  8. rust军用船指令_Rust基础学习笔记(五):Cargo与Crates.io

    最近复习鸽了几天,今天继续学,希望在考试之前搞定这个官方文档 もうダメ.... 本章学习Cargo和Crates.io相关,内容有下: 自定义构建 向crates.io提交libraries 利用工作 ...

  9. Rust编程语言的核心部件

    Rust是一门强调安全.并发.高效的系统编程语言.无GC实现内存安全机制.无数据竞争的并发机制.无运行时开销的抽象机制,是Rust独特的优越特性.它声称解决了传统C语言和C++语言几十年来饱受责难的内 ...

  10. rust安装教程linux,如何在 Linux 中安装 Rust 编程语言

    Rust 通常被称为 rust-lang.Rust 是一个由 Mozilla Research 赞助的通用的.多范式.现代的.跨平台和开源系统编程语言. 它旨在实现安全性.速度和并发性等目标. Rus ...

最新文章

  1. 惊了!计算机视觉还可以这么玩?
  2. 图片上传成功但是图片显示不出来_小程序上传图片到腾讯云
  3. boostrap 鼠标滚轮滑动图片_Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法...
  4. 空格替换_O(n)方法
  5. 中石油oj 2654: 序列合并
  6. 如何输入一个整数逆序输出_如何匹配DSP输入输出信号
  7. 自动驾驶攻破的难点在哪,何时能到Level 5?
  8. CF-1156F Card Bag
  9. Thread 相关函数和属性
  10. 【Iphone 游戏开发之一】创建视图并绘制简单图形
  11. Python3 写入文件
  12. 190717每日一句
  13. 中望cad文字显示问号怎么办_如果CAD工程图显示乱码怎么办?
  14. 201671030119 词频统计软件项目报告
  15. P7369 [COCI2018-2019#4] Elder 题解
  16. 路由器实现不同VLAN间通信
  17. IoT技术概览(postscapes)
  18. PCB板的跨分割设计
  19. 趣图:新手 vs 老鸟
  20. Mackey-Glass时滞混沌系统

热门文章

  1. 应急响应前移:从事后到事前
  2. 浪潮“151计划”:信息安全 没有“偏远地区”
  3. Leetcode. 14. Longest Common Prefix
  4. 黄聪:wordpress如何添加自定义文章快速编辑按钮
  5. cache 的设计与实现
  6. 输出有向图的邻接矩阵
  7. struts 2.3.8备忘
  8. 易飞ERP系统平台故障
  9. Codeforces 15C Industrial Nim 简单的游戏
  10. LBP及纹理表达 转自http://blog.sina.com.cn/s/blog_ba9d7d9901018k4v.html