【跟小嘉学 Rust 编程】二十二、常用 API
系列文章目录
【跟小嘉学 Rust 编程】一、Rust 编程基础
【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
【跟小嘉学 Rust 编程】六、枚举和模式匹配
【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
【跟小嘉学 Rust 编程】八、常见的集合
【跟小嘉学 Rust 编程】九、错误处理(Error Handling)
【跟小嘉学 Rust 编程】十一、编写自动化测试
【跟小嘉学 Rust 编程】十二、构建一个命令行程序
【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
【跟小嘉学 Rust 编程】十五、智能指针(Smart Point)
【跟小嘉学 Rust 编程】十六、无畏并发(Fearless Concurrency)
【跟小嘉学 Rust 编程】十七、面向对象语言特性
【跟小嘉学 Rust 编程】十八、模式匹配(Patterns and Matching)
【跟小嘉学 Rust 编程】十九、高级特性
【跟小嘉学 Rust 编程】二十、进阶扩展
【跟小嘉学 Rust 编程】二十一、网络编程
【跟小嘉学 Rust 编程】二十二、常用 API
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、 文件系统(FileSystem)
- 1.1、目录操作
- 1.1.1、创建目录
- 1.1.2、读取目录
- 1.1.3、删除目录
- 1.2、文件操作
- 1.2.1、文件拷贝
- 1.2.2、文件读取
- 1.2.3、删除文件
- 1.2.4、文件重命名
- 1.2.5、写入文件
- 1.2.6、设置文件权限
- 1.2.7、创建文件
- 二、标准输入输出
- 2.1、标准输入
- 2.1、标准输出
- 三、集合操作
- 总结
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、 文件系统(FileSystem)
- 1.1、目录操作
- 1.1.1、创建目录
- 1.1.2、读取目录
- 1.1.3、删除目录
- 1.2、文件操作
- 1.2.1、文件拷贝
- 1.2.2、文件读取
- 1.2.3、删除文件
- 1.2.4、文件重命名
- 1.2.5、写入文件
- 1.2.6、设置文件权限
- 1.2.7、创建文件
- 二、标准输入输出
- 2.1、标准输入
- 2.1、标准输出
- 三、集合操作
- 总结
前言
本章节讲解 Rust 标准库 std::fs、std::io、std::path、std::collections、std::env等常见 API。
主要教材参考 《The Rust Programming Language》
主要教材参考 《Rust For Rustaceans》
主要教材参考 《The Rustonomicon》
主要教材参考 《Rust 高级编程》
一、 文件系统(FileSystem)
std::fs 提供了 File、FileType、Metadata、OpenOptions、Permissions、ReadDir、DirEntry、DirBuilder、FileTimes等结构体。
1.1、目录操作
1.1.1、创建目录
我们使用 DirBuilder 建造器可以递归创建目录结构,该方法采用了一种链式调用方式使用
#![allow(unused)]
use std::fs::{self, DirBuilder};
fn main() {let path = "/tmp/foo/bar/baz";DirBuilder::new().recursive(true).create(path).unwrap();assert!(fs::metadata(path).unwrap().is_dir());
}
也可以使用 create_dir 和 create_dir_all 方法来创建目录
pub fn create_dir<P: AsRef<Path>>(path: P) -> Result<()>
pub fn create_dir_all<P: AsRef<Path>>(path: P) -> Result<()>
1.1.2、读取目录
我们可以使用 fs::read_dir 方法读取目录,返回的是Result<DirEntry>, DirEntry 提供了获取文件元数据信息(Metadata)和文件路径等方法。
- 我们使用元数据信息可以获取文件的权限信息,判断文件类型,获取文件大小(len)、文件修改时间、访问时间、创建时间
- file_type 方法可以获取文件类型,通过filetype可以判断文件是否是目录、是否是文件、是否是链接文件;
- file_name 方法可以获取文件名称;
#![allow(unused)]
use std::fs;
use std::io;fn main() -> io::Result<()>{for entry in fs::read_dir(".")?{if let Ok(entry) = entry {if let Ok(file_type) = entry.file_type() {println!("{:?}: {:?}", entry.path(), file_type);}else {println!("Couldn't get file type for {:?}", entry.path());}if let Ok(metadata) = entry.metadata(){println!("{:?}: {:?}", entry.path(), metadata.permissions());}else {println!("Couldn't get metadata for {:?}", entry.path());}}}Ok(())
}
1.1.3、删除目录
pub fn remove_dir<P: AsRef<Path>>(path: P) -> Result<()>
pub fn remove_dir_all<P: AsRef<Path>>(path: P) -> Result<()>
1.2、文件操作
1.2.1、文件拷贝
使用 fs:: copy 方法可以实现文件拷贝,可以参考 io::copy 方法
#![allow(unused)]
use std::fs;
use std::io;fn main() -> io::Result<()>{fs::copy("foo.txt", "bar.txt")?; // Copy foo.txt to bar.txtOk(())
}
1.2.2、文件读取
可以使用 fs::read 方法实现文件内容读取,可以参考 File::open 和 read_to_end 和read_to_string 方法进行文件读取
pub fn read<P: AsRef<Path>>(path: P) -> Result<Vec<u8>>
除此之外,我们还可以使用 BufReader 来进行文件按行读取;
let reader = BufReader::new(file);for line in reader.lines() {println!("{}", line?);}
也可以使用 file.read 方法读取带有缓冲区的文件;
1.2.3、删除文件
pub fn remove_file<P: AsRef<Path>>(path: P) -> Result<()>
1.2.4、文件重命名
pub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<()>
1.2.5、写入文件
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()>
同样也可以使用 BufWriter 进行文件写入
1.2.6、设置文件权限
pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions) -> Result<()>
file 结构也提供了设置权限的方法
pub fn set_permissions(&self, perm: Permissions) -> Result<()>
1.2.7、创建文件
使用 File::create 方法来创建文件, 这种方式创建的是只写的文件。
use std::fs::File;
use std::io::Write;fn main() -> std::io::Result<()> {let mut f = File::create("foo.txt")?;f.write_all(&1234_u32.to_be_bytes())?;Ok(())
}
我们也可以使用链式调用方式来创建打开文件
fs::File::options().read(true).write(true).create_new(true).open("test.txt");OpenOptions::new().read(true).write(true)create(true).open("foo.txt");
二、标准输入输出
2.1、标准输入
使用 io::stdin 可以获取 Stdin 对象,该对象表示标准输入。
let mut input = String::new();
match io::stdin().read_line(&mut input) {Ok(n) => {println!("{n} bytes read");println!("{input}");}Err(error) => println!("error: {error}"),
}
2.1、标准输出
使用 os::stdout 可以获取 Stdoout 对象。可以向标准输出输出字符串 。我们一般不这么使用;
三、集合操作
std::collections 里面提供了 BTreeMap、BTreeSet、BinaryHeap、HashMap、HashSet、LinkedList、VecDeque等数据结构
总结
以上就是今天要讲的内容
相关文章:
【跟小嘉学 Rust 编程】二十二、常用 API
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...
【ES6】Class中this指向
先上代码: 正常运行的代码: class Logger{printName(name kexuexiong){this.print(hello ${name});}print(text){console.log(text);} }const logger new Logger(); logger.printName("kexueixong xiong");输出: 单独调用函数p…...
Python 编程竟然如此幽默!揭秘程序员们的搞笑日常,快来看看吧!
食用原文效果更佳,原文链接 Python 编程竟然如此幽默!揭秘程序员们的搞笑日常,快来看看吧! 在 Python 编程的世界里,充满了智慧与创造力。 当然,也少不了轻松幽默的段子,这些段子让程序员们在…...
Linux c++开发-03-使用CMake组织工程
一、简单文件的编译 有如下的目录结构: 其中 helloworld.cpp如下: #include <iostream> using namespace std; int main() {printf("hello world my name is Ty!");return 0; }CMakeLists.txt如下: cmake_minimum_requir…...
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
文章目录 一、函数指针定义方法1、直接定义函数指针2、通过 函数类型 定义 函数指针3、通过 函数指针类型 定义 函数指针4、代码示例 - 不同方式定义函数指针 博客总结 : 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;判定标准 : 只有 函数参数 的 个数 / 类…...
异常-java
目录 一、异常的概念和体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 二、异常的处理 2.1 防御式编程 2.2 异常抛出 2.3 异常捕获 2.4 异常处理流程 三、自定义异常类 一、异常的概念和体系结构 1.1 异常的概念 程序员在开发过程中,想要将代码写得…...
软件测试/测试开发丨Selenium Web自动化测试 高级控件交互方法
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&am…...
深入Go语言:进阶指南
深入Go语言:进阶指南 欢迎来到深入Go语言的进阶指南。如果你已经熟悉Go语言的基础知识,想要更深入地探索这门语言的高级特性和技巧,那么本篇博客将为你提供有关Go语言的更多深入内容。 Go语言的并发编程 Go语言以其强大的并发支持而闻名。…...
FOXBORO FBM232 P0926GW 自动化控制模块
Foxboro FBM232 P0926GW 是 Foxboro(福克斯博罗)自动化控制系统的一部分,通常用于监测和控制工业过程。以下是关于这种类型的自动化控制模块可能具有的一些常见功能: 数字输入通道: FBM232 P0926GW 控制模块通常具有多…...
【C# Programming】编程入门:方法和参数
一、方法 1、方法的定义 由一系列以执行特定的操作或计算结果语句组成。方法总是和类关联,类型将相关的方法分为一组。 方法名称 形参和实参(parameter & argument)返回值 2、命名空间 一种分类机制,用于组合功能相关的所有类型。命名空间是分级…...
【报错】 Cannot create property ‘showColumn‘ on number ‘-1‘
1、报错原因: 代码如下: 报错是因为:this.findObject(this.option.column, "thirdId")是一个number ,没有.showColumn属性 2、修改代码 将其变成object属性就行了...
C++容器string的运用和注意
介绍 首先,先说明,string在C的string头文件中定义,而在C语言中的字符串就是字符数组,在C中,string容器相当于C语言中的字符数组,string比C语言中的字符数组更为好用,如:C中cin/cout可…...
用对工具,你的全渠道电子商务业务就成功了一半
希望将全渠道电子商务纳入您的业务战略,但不确定从哪里开始?我们为您提供保障。这篇文章将指导您了解全渠道商务的基础知识,以及它与多渠道方法的区别,还将探讨利用全渠道方法的众多好处,并讨论企业如何通过全渠道客户…...
TDengine学习(1):采集量(Metric),标签(label),数据采集点,表,超级表,子表、库
因为TDengine是面向物联网诞生的一种数据库,所以在一些概念的命名上有一点相应的特色。 一、数据采集点 比如需要对一辆高铁上的各种信息进行采集,采集信息存入数据库中。我们可以对高铁车厢内的一些数据进行采集,比如:车厢内温…...
【洛谷 P1029】[NOIP2001 普及组] 最大公约数和最小公倍数问题 题解(辗转相除法)
[NOIP2001 普及组] 最大公约数和最小公倍数问题 题目描述 输入两个正整数 x 0 , y 0 x_0, y_0 x0,y0,求出满足下列条件的 P , Q P, Q P,Q 的个数: P , Q P,Q P,Q 是正整数。 要求 P , Q P, Q P,Q 以 x 0 x_0 x0 为最大公约数,以…...
Golang 中的 errors 包详解:返回自定义 error 类型
之前的文章《Golang 中的 errors 包详解》详细讲解了 errors 包的主要类型和函数,以及它们的使用方法。本文结合之前讲解的知识,来讲解一下根据自己或团队的项目要求如何返回自定义的 error 类型。 为什么需要自定义 error 类型? 在日常开发…...
C#开发的OpenRA游戏之信标按钮
前面已经分析了两个按钮:变卖和维修,接着下来就是分析信标按钮,这个按钮使用是比较少,但是对于多人游戏时,使用这个信号就很方便同盟军过来查看和帮助了,相当于一个朋友之间共同查看的地址。当你经过同盟标记的标志时,就会听到beacon detected,检测到信标,这就是你的盟…...
16字节协议的串口通信
1.协议要求 协议为帧传输,一共16字节。主要是2字节的固定帧头 EB 90,2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头:2字节,固定值 8’HEB、8’H90 帧计数:2字节,用来说明发出去帧是…...
升哲科技城市级“算力+数字底座”服务亮相2023服贸会
9月2日至6日,以“开放引领发展,合作共赢未来”为主题的2023年中国国际服务贸易交易会在北京隆重举办。作为城市级数据服务商,升哲科技(SENSORO)连续第四年参加服贸会,携城市级“算力数字底座”服务及在城市…...
动态规划之简单多状态
简单多状态 1. 按摩师(easy)2. 打家劫舍II (medium)3. 删除并获得点数(medium)4. 买卖股票的最佳时机含冷冻期(medium)5. 买卖股票的最佳时机III(hard) 1. 按…...
DLSS版本切换终极指南:掌控游戏性能优化的核心技术
DLSS版本切换终极指南:掌控游戏性能优化的核心技术 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 想要在《赛博朋克2077》中体验更流畅的光追效果?或是让《艾尔登法环》的画面表现更上一层楼&a…...
基于英创ARM9嵌入式主板实现双CAN接口的硬件设计与Linux驱动配置实战
1. 项目概述:为什么需要双CAN接口? 在工业自动化、汽车电子、新能源设备这些领域里,CAN总线就像设备之间的“神经系统”,负责传递各种控制指令和状态数据。一个CAN接口是基础,但当你需要同时连接两个独立的CAN网络&…...
nardeas/ssh-agent:增强版SSH代理工具的设计、部署与实战应用
1. 项目概述:一个被低估的SSH代理工具如果你和我一样,日常需要在多台服务器、开发机、跳板机之间穿梭,手里捏着十几把甚至几十把SSH密钥,那你一定对ssh-agent这个工具又爱又恨。爱的是,它确实能让你免去一遍遍输入密钥…...
ESP32 ADC采样率上不去?实测DMA模式下的真实性能与避坑指南
ESP32 ADC DMA模式性能深度优化:突破2MSPS采样率的关键策略 在物联网边缘计算领域,ESP32凭借其出色的性价比和丰富的外设资源,已成为众多高速数据采集项目的首选方案。当开发者尝试将ESP32的ADC采样率推向理论极限时,往往会遭遇现…...
《流浪的梦想家》的传播入口:漂泊感如何形成记忆点
从内容传播角度看,《流浪的梦想家》的入口在两个词的拉扯:流浪意味着还在路上,梦想家意味着心里仍有方向。这个反差足够形成记忆点。这首歌不适合被写成空泛远方。更准确的场景,是一个人背着行李、换城市、换工作、或者在深夜车窗…...
基于RT-Thread的AB32VG1开发板ADC采集与OLED显示实战
1. 项目概述与核心思路最近在折腾中科蓝讯的AB32VG1开发板,这块板子资源挺有意思,RISC-V内核加上丰富的外设,拿来练手嵌入式实时系统再合适不过。之前已经搞定了I2C接口的OLED屏幕显示,能让它乖乖地显示预设的字符串。但光显示静态…...
Markdown到思维导图的架构化转换:基于AST解析与D3渲染的技术实现
Markdown到思维导图的架构化转换:基于AST解析与D3渲染的技术实现 【免费下载链接】markmap Build mindmaps with plain text 项目地址: https://gitcode.com/gh_mirrors/ma/markmap Markdown思维导图转换技术通过结构化文本解析与可视化渲染引擎的协同工作&a…...
PostgreSQL 主从流复制完整部署指南:从零搭建到故障切换
文章目录每日一句正能量前言1.环境准备1.1 基础环境要求1.2 安装PostgreSQL2.1 修改PostgreSQL主配置文件2.2 修改客户端认证配置文件2.3 创建复制专用用户2.4 重启主库使配置生效2.5 备份主库数据(供从库初始化)3.从库配置3.1 停止从库PostgreSQL服务并…...
蓝桥杯单片机备赛:AT24C02 EEPROM存储整型数据的完整流程与常见错误分析
蓝桥杯单片机备赛:AT24C02 EEPROM存储整型数据的完整流程与常见错误分析 在蓝桥杯单片机竞赛中,AT24C02 EEPROM模块是必考内容之一。许多选手已经掌握了基本字符型数据的读写操作,但当面对整型数据时,往往会遇到各种问题。本文将深…...
知识竞赛选手排位抽签系统使用全解析
🎲 知识竞赛选手排位抽签系统使用全解析公平 透明 高效 让每一场竞赛从起点就值得信赖🎯 引言:为何需要专业的抽签系统在知识竞赛活动中,选手的排位与分组抽签是确保竞赛公平、公正的起点。传统的人工抽签方式不仅效率低下&…...
