【跟小嘉学 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](文章目录)](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [一、 文件系统(FileSystem)](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.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、标准输出 三、集合操作 总结)
  • [1.1.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、标准输出 三、集合操作 总结)
  • [1.1.2、读取目录](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.1.3、删除目录](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2、文件操作](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [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、标准输出 三、集合操作 总结)
  • [1.2.2、文件读取](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2.3、删除文件](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2.4、文件重命名](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2.5、写入文件](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2.6、设置文件权限](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [1.2.7、创建文件](#文章目录 系列文章目录 @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、标准输出 三、集合操作 总结)
  • [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、标准输出 三、集合操作 总结)
  • [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、标准输出 三、集合操作 总结)
  • [三、集合操作](#文章目录 系列文章目录 @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 建造器可以递归创建目录结构,该方法采用了一种链式调用方式使用

rust 复制代码
#![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 方法来创建目录

rust 复制代码
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 方法可以获取文件名称;
rust 复制代码
#![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、删除目录

rust 复制代码
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 方法

rust 复制代码
#![allow(unused)]
use std::fs;
use std::io;

fn main() -> io::Result<()>{
  
    fs::copy("foo.txt", "bar.txt")?;  // Copy foo.txt to bar.txt
 
    Ok(())
}

1.2.2、文件读取

可以使用 fs::read 方法实现文件内容读取,可以参考 File::open 和 read_to_end 和read_to_string 方法进行文件读取

rust 复制代码
pub fn read<P: AsRef<Path>>(path: P) -> Result<Vec<u8>>

除此之外,我们还可以使用 BufReader 来进行文件按行读取;

rust 复制代码
 let reader = BufReader::new(file);
    for line in reader.lines() {
        println!("{}", line?);
    }

也可以使用 file.read 方法读取带有缓冲区的文件;

1.2.3、删除文件

rust 复制代码
pub fn remove_file<P: AsRef<Path>>(path: P) -> Result<()>

1.2.4、文件重命名

rust 复制代码
pub fn rename<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<()>

1.2.5、写入文件

rust 复制代码
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()>

同样也可以使用 BufWriter 进行文件写入

1.2.6、设置文件权限

rust 复制代码
pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions) -> Result<()>

file 结构也提供了设置权限的方法

rust 复制代码
pub fn set_permissions(&self, perm: Permissions) -> Result<()>

1.2.7、创建文件

使用 File::create 方法来创建文件, 这种方式创建的是只写的文件。

rust 复制代码
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(())
}

我们也可以使用链式调用方式来创建打开文件

rust 复制代码
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 对象,该对象表示标准输入。

rust 复制代码
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等数据结构

总结

以上就是今天要讲的内容

相关推荐
Ajiang28247353046 分钟前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空11 分钟前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----5 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it6 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_17448285756 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式