当前位置: 首页 > news >正文

Rust 实战练习 - 3. 文件系统,权限,读写,路径组合,time

目标:

  • 文件系统,遍历目录
  • 路径的使用
  • 权限和文件属性
  • 时间time
use std::{env, fmt::Debug, os::unix::fs::{MetadataExt, PermissionsExt}, path::{Path, PathBuf}, time::SystemTime};fn main() {// 时间处理// 除Duration和SystemTime外,标准库没有时间处理模块,需要借助chrono 或 time模块let t1 = Duration::from_secs(10);_ = t1.saturating_add(Duration::new(8, 200));println!("{}", t1.as_secs());path_test();fs_test();
}fn path_test(){// 在Linux下好用let p1 = Path::new("/home/xin/Download");println!("{:?}, is dir? {}, is sym? {}, parent: {:?}", p1, p1.is_dir(), p1.is_symlink(), p1.parent().unwrap());// 在windows下才好用let p1 = Path::new("C:\\Windows\\System32");println!("{:?}, is dir? {}, is sym? {}, parent: {:?}", p1, p1.is_dir(), p1.is_symlink(), p1.parent().unwrap());// 构建一个路径, Windows下使用// Linux下这么使用会出现路径分隔符混乱let mut p2 = PathBuf::from("C:\\");p2.push("Windows\\System32");p2.push("tmp\\");println!("{}", p2.display()); // C:\/Windows\System32/tmp\ 异常// linuxlet mut p3 = PathBuf::from("/home");p3.push("xin");p3 = p3.join("Download/");println!("{}", p3.display()); // /home/xin/Download/// 便利方法let p4 : PathBuf = ["/etc", "nginx", "nginx.conf"].iter().collect();println!("{}", p4.display());// 路径// 如果路径不存在,会报错,依赖系统文件系统println!("{:?}", PathBuf::from("/home/xin/a/../c/./d/1.txt").canonicalize());}fn fs_test(){// 下载目录let p1 = env::home_dir().unwrap().join("Download");println!("{}", p1.display());if p1.exists() {// 查看文件夹属性let m = p1.metadata().unwrap();println!("accessed: {}, create {}, dir {}, sym {}, perm {:o}, size {}", m.accessed().unwrap().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs(), // unix timestrampm.created().unwrap().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs(),m.is_dir(), m.is_symlink(), m.permissions().mode(), // unix 权限m.size());// 是目录,就继续读取子文件if p1.is_dir() {for sub in p1.read_dir().unwrap() {if let Ok(entry) = sub {  // DirEntrylet ft = entry.file_type().unwrap(); // FileTypelet fp = entry.path();println!("name: {},\t dir? {},\t file? {},\t sym? {},\t Path: {}", entry.file_name().into_string().unwrap(), ft.is_dir(), ft.is_file(), ft.is_symlink(),fp.display());// 对于符号链接,读取链接指向的地址if ft.is_symlink() {println!("\tsymlink: {} => {}", fp.display(), fp.read_link().unwrap().display());}}}}}
}
http://www.lryc.cn/news/325912.html

相关文章:

  • 既有理论深度又有技术细节——深度学习计算机视觉
  • Flink Temporal Join 系列 (2):用 Temporal Table DDL 实现基于处理时间的关联
  • eclipse中使用PlantUML plugin查看对象关系
  • HCIP的学习(4)
  • MySQL写shell的问题
  • 每天学习一会java(第一天)----条件运算符
  • hyperf 二十八 修改器 一
  • ubuntu20.04安裝輸入法
  • 2024年【熔化焊接与热切割】考试报名及熔化焊接与热切割找解析
  • 聚类分析|基于层次的聚类方法及其Python实现
  • 前端实现导出xlsx功能
  • 算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
  • RESTful架构
  • 从IO操作与多线程的思考到Redis-6.0
  • MNN介绍、安装和编译
  • 【计算机图形学】AO-Grasp: Articulated Object Grasp Generation
  • 「媒体宣传」财经类媒体邀约资源有哪些?-51媒体
  • 学习资料记录
  • 数据结构进阶篇 之 【二叉树】详细概念讲解(带你认识何为二叉树及其性质)
  • vue.js制作学习计划表案例
  • nginx localtion 匹配规则
  • Git:分布式版本控制系统
  • [STL]priority_queue类及反向迭代器的模拟实现
  • vue2 脚手架
  • 【OpenStack】OpenStack实战之开篇
  • Python实现WebSocket通信
  • MATLAB 自定义生成直线点云(详细介绍) (47)
  • UniTask 异步任务
  • 【git分支管理策略】如何高效的管理好代码版本
  • css的transition详解