news 2026/6/10 4:07:59

Rust文件读写详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust文件读写详解

@[TOC

文件读写

Rust的文件读写功能被封装在标准库的fs中,考虑到读取文件的前提是有一个文件,所以先来学习文件写入功能,示例如下

usestd::fs;fs::write("test.txt","hello world").unwrap();

【write】函数非常简单,唯二的参数就是路径和内容,路径可以是字符串,也可以是Path类型;内容可以是字符串,也可以是字节数组。其返回值是一个Result类型,所以执行完毕之后需要进行处理,否则会被警告,unwrap的作用是将其转化为普通类型。

编译运行之后,会在同级目录下创建一个test.txt文件,内容为hello world。接下来通过fs中的函数进行读取。fs中提供了文本读取函数read_to_string与二进制读取函数read,后者回将读取到的内容识别为8位无符号整型的数组。示例如下

lettxt:String=fs::read_to_string("test.txt").unwrap();txt//"hello world"letvec:Vec<u8>=fs::read("test.txt").unwrap();vec

其中,txt为hello world,vec为[104,101,108,108,111,32,119,111,114,108,100][104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100][104,101,108,108,111,32,119,111,114,108,100]

File

前面介绍的三个读写函数,功能比较单一,一个更加灵活的文件交互方案是用OpenOptions,这个结构体有点像其他编程语言中的open函数,可以指定创建的文件是否可以读写,示例如下

use std::io::{Write, Read, Seek, SeekFrom}; let mut file: fs::File = fs::OpenOptions::new( ).write(true ).read(true ).create(true ).truncate(false ).open("test.txt" ).expect("Failed to open file"); file.write_all(b"Hello, Rust!").unwrap(); file.seek(SeekFrom::Start(0))?; let mut contents:String = String::new(); file.read_to_string(&mut contents)?; contents //"Hello, Rust!"

其中,【write】设为true表示可读;【create】设为true表示如果文件不存在则创建;【truncate】若设为true,则清空文件内容。最后打开test.txt。由于上述代码是写在evxcr中,所以在换行的时候把括号拆开了。

【write_all】是Write中为File封装的trait,所以尽管代码中国没有出现类似Write::xxx的字样,但还是要use一下,Read同理。

【seek】用于移动文件指针。由于刚刚在写操作的时候,文件指针已经在文件末尾,因此通过seek让其重返零点,从而在后面用read读取的时候,能够得到完整的内容。

追加模式

其实在上述代码中,只需在打开文件之后,先把文件指针移动到末尾,就可以开启追加模式。如果不想麻烦,也可以用append(true)。需要注意的是,append和truncate冲突,因为要是把truncate设为true的话,打开文件后内容被清空,就算是追加,也和新建一个没什么区别了。下面是追加文件内容的测试。

letmutfile:fs::File=fs::OpenOptions::new().append(true).read(true).open("test.txt").expect("cannot open file");file.write_all(b"append").expect("write failed");file.seek(SeekFrom::Start(0))?;file.read_to_string(&mutcontents)?;contents//"Hello, Rust!append"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 4:04:04

人体姿态估计全维度深度复现 | 上下双范式原理拆解、YOLO26-Pose/ViTPose/RTMPose多模型对标、助力工地安防健身康复动作识别有效提效

目录 一、前言:姿态估计核心价值与行业发展现状 二、姿态估计核心基础:关键点、骨架与技术范式 2.1 行业通用关键点标准 2.2 两大核心技术范式深度对比 2.2.1 自上而下范式(工业量产主流) 2.2.2 自下而上范式(高密度场景专用) 2.3 关键点预测两大核心机制 2.3.1 …

作者头像 李华
网站建设 2026/6/10 4:04:01

DFT笔记67

7.2.3.2 Two-Phase Strategy(两阶段诊断策略) 针对上面提到的这个问题,可以用这节的两阶段策略来解决,这两阶段就是: 第一阶段,找到prime candidate,就是在partitioning之前先找到structurally independent faults 第二阶段,把第一阶段找到的prime candidates排除后,…

作者头像 李华
网站建设 2026/6/10 3:45:43

CODESYS平台 符号配置里面找不到全局变量怎么办?

一、问题点CODESYS平台符号配置用于访问PLC变量的机制&#xff0c;允许通过符号名称&#xff08;变量名&#xff09;进行数据采集和交互。在CODESYS平台明明已添加全局变量&#xff0c;却在符号配置&#xff0c;符号列表里找不到在&#xff0c;这给后续PLC与第三方软件例如PLC-…

作者头像 李华
网站建设 2026/6/10 3:45:37

金刚石NV色心量子传感:北睿科技高灵敏度磁场探测方案

金刚石NV色心量子传感概述金刚石NV色心量子传感是一种利用金刚石中氮-空位&#xff08;NV&#xff09;色心的量子特性来实现高灵敏度磁场探测的技术。北睿科技基于此原理&#xff0c;开发了可在室温下工作的高精度磁场探测方案&#xff0c;灵敏度可达皮特斯拉级别&#xff0c;应…

作者头像 李华
网站建设 2026/6/10 3:41:32

别再只用Numba了!Python JIT加速实战:NumPy循环优化与Pandas避坑指南

别再只用Numba了&#xff01;Python JIT加速实战&#xff1a;NumPy循环优化与Pandas避坑指南在Python性能优化的世界里&#xff0c;JIT&#xff08;即时编译&#xff09;技术一直是个让人又爱又恨的存在。当你看到一段原本需要运行10秒的NumPy循环代码&#xff0c;在加上jit装饰…

作者头像 李华