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

Rust基础学习-Rust中的文件操作

文件结构

Rust中,std::fs::File 结构体代表一个文件。它允许我们对文件执行读/写操作。文件 I/O 是通过提供与文件系统交互的功能的 std::fs 模块执行的。

File 结构体中的所有方法都返回std::io::Result的变体,或者简单地是 Result 枚举。这里会涉及到Rust中文件几个基本操作:

  • 打开文件
  • 从文件读取
  • 写入文件
  • 删除文件
  • 追加到文件

打开文件

Rust中,可以使用File::open()方法来打开一个指定文件,函数接收一个文件路径作为参数并返回一个文件对象,如果文件不存在,将会返回一个Err,看个例子:

use std::fs::File;fn main() {let datas = File::open("data.txt");let file_data = match datas {Ok(file) => file,Err(error) => panic!("error:{:?}", error),};println!("Data file :{:?}", file_data);
}
  • 在程序顶部,我们导入模块 std::fs::File 以使用文件 I/O 函数。

  • 要打开一个文件,我们调用 File::open("data.txt"),该函数会读取本地文件系统中的 data.txt 文件。

  • open() 函数返回一个 Result 枚举,该枚举要么返回 File 对象,要么返回 Err

  • 然后,我们对 data_result 变量进行模式匹配,如果打开文件时出现错误,就会调用 panic!。如果打开文件没有错误,我们将输出 File 对象。

运行程序会打印读取到的文件对象,如果存在的花。

image-20240605094335709


读取文件

读取文件,可以使用Rust提供的read_to_string()方法,该方法实现了std::io::Read.它会读取直到文件结束(EOF)的所有字节,并将其复制到一个可变字符串。

use std::fs::File;
use std::io::Read;
fn main() {let mut datas = File::open("data.txt").unwrap();let mut file_content = String::new();datas.read_to_string(&mut file_content).unwrap();println!("file content :{:?}", file_content);
}

image-20240605095400673

  • 在这里,我们导入两个模块:std::fs::File std::io::Read 用于读取文件。

  • 我们首先打开文件 data.txt,并将其结果绑定到一个名为 data_file 的变量。

  • 打开文件后,我们使用 read_to_string() 方法,该方法将一个空的可变字符串 file_content 作为参数,并将文件 data.txt 的内容复制到 file_content 中。


文件写入

使用write()方法写入文件,该方法来自std::io::Write标准库。

use std::fs::File;
use std::io::{Read, Write};
fn main() {let mut data_file = File::create("data.txt").expect("creation failed");data_file.write("怎么样,你鸡哥厉不厉害!".as_bytes()).expect("write error");println!("写入完成!");
}

image-20240605100630742

  • 导入std::fs::Filestd::io::Write 模块来写入文件。
  • 首先使用 File::create("data.txt") 方法创建一个名为data.txt的文件,并将其绑定到可变变量 data_file
  • 创建文件后,我们使用 write() 方法向文件中写入内容。

这种方式写入文件,新的内容会将之前文件中的内容覆盖。


删除文件

use std::fs;fn main() {// Remove a filefs::remove_file("data.txt").expect("could not remove file");println!("Removed file data.txt");
}
  • 导入 std::fs 模块来删除一个文件。
  • 使用 remove_file() 方法来删除文件 data.txt。如果操作无法继续,我们返回一个自定义消息:在出现错误的情况下无法删除文件。
  • 如果找不到文件data.txt或无法删除,将会遇到错误。

追加写入

要在Rust中以追加的模式写入文件,可以使用std::OpenOptions中的append()方法实现,看代码:

use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
fn main() {let mut data_file = OpenOptions::new().append(true).open("data.txt").expect("connot open file");data_file.write("鸡你太美!".as_bytes()).expect("write failed!");println!("文件追加成功!");
}

image-20240605101531812

  • 在这里导入 std::fs::OpenOptionsstd::io::Write 模块用于向文件追加。

  • OpenOptions::new() append(true) 方法打开文件data.txt以进行追加。

  • 接下来,我们使用来自 File 对象的 write() 方法向文件写入额外内容。

  • 为了处理错误,我们将 expect() 方法与自定义错误消息链接。


小结

本文使用理论加案例的方式快速学习了Rust中的文件读写相关的内容,掌握了文件处理中的读写删追等基本操作,怎么样,你坤哥厉不厉害!

相关文章:

Rust基础学习-Rust中的文件操作

文件结构 在Rust中,std::fs::File 结构体代表一个文件。它允许我们对文件执行读/写操作。文件 I/O 是通过提供与文件系统交互的功能的 std::fs 模块执行的。 File 结构体中的所有方法都返回std::io::Result的变体,或者简单地是 Result 枚举。这里会涉及…...

Activator.CreateInstance 与 Type.InvokeMember的区别

文章目录 一、使用 Activator.CreateInstance 创建实例1、使用 Activator.CreateInstance 的优点和缺点2、使用 Activator.CreateInstance 的代码示例 二、使用 Type.InvokeMember 创建实例1、使用 Type.InvokeMember 的优点和缺点2、使用 Type.InvokeMember 的代码示例 三、Ac…...

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务 家政服务是一个专为家政服务人员设计的平台,该平台旨在提供便捷、高效的工作机会,同时确保服务质量和客户体验。 以下是关于家政服务师…...

【MySQL】探索 MySQL 的 GROUP_CONCAT 函数

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 GRO…...

SpringBoot整合RabbitMQ (持续更新中)

RabbitMQ 官网地址:RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ 与 Erlang 版本兼容关系​ 3.13.0 26.0 26.2.x The 3.13 release series is compatible with Erlang 26. OpenSSL 3 support in Erlang is considered to be mature and ready for…...

瑞鑫RK3588 画中画 OSD 效果展示

这些功能本来在1126平台都实现过 但是迁移到3588平台之后 发现 API接口变化较大 主要开始的时候会比较费时间 需要找到变动接口对应的新接口 之后 就比较好操作了 经过几天的操作 已实现 效果如下...

【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP+Uniapp)

🔍防伪溯源一体化管理系统:守护品质,追溯无忧 一款基于FastAdminThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能&#xff0…...

自然语言处理:第三十三章FILCO:过滤内容的RAG

文章链接: [2311.08377] Learning to Filter Context for Retrieval-Augmented Generation (arxiv.org) 项目地址: zorazrw/filco: [Preprint] Learning to Filter Context for Retrieval-Augmented Generaton (github.com) 在人工智能领域,尤其是在开放域问答和事…...

js:flex弹性布局

目录 代码&#xff1a; 1、 flex-direction 2、flex-wrap 3、justify-content 4、align-items 5、align-content 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…...

Pytorch常用函数用法归纳:创建tensor张量

1.torch.arange() (1)函数原型 torch.arange(start,end,step,*,out,dtype,layout,device,requires_grad) (2)参数说明: 参数名称参数类型参数说明startNumber起始值&#xff0c;默认值为0endNumber结束值&#xff0c;取不到&#xff0c;为开区间stepNumber步长值&#xff0…...

WPF前端:一个纯Xaml的水平导航栏

效果图&#xff1a; 代码&#xff1a; 1、样式代码&#xff0c;可以写在窗体资源处或者样式资源文件中 <Style x:Key"MenuRadioButtonStyle" TargetType"{x:Type RadioButton}"><Setter Property"FontSize" Value"16" />…...

谷粒商城实战(033 业务-秒杀功能4-高并发问题解决方案sentinel 1)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第326p-第p331的内容 关注的问题 sentinel&#xff08;哨兵&#xff09; sentinel来实现熔断、降级、限流等操作 腾讯开源的tendis&#xff0c…...

STM32项目分享:智能家居(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…...

游戏盾之应用加速,何为应用加速

在数字化时代&#xff0c;用户对于应用程序的防护要求以及速度和性能要求越来越高。为了满足用户的期望并提高业务效率&#xff0c;应用加速成为了不可忽视的关键。 应用加速是新一代的智能分布式云接入系统&#xff0c;采用创新级SD-WAN跨域技术&#xff0c;针对高防机房痛点进…...

Java 基础面试题

文章目录 重载与重写抽象类与接口面向对象a a b 与 a b 的区别final、finalize、finallyString、StringBuild、StringBuffer位运算反射 重载与重写 重载&#xff1a;是在同一个类中&#xff0c;方法名相同&#xff0c;方法参数类型&#xff0c;个数不同&#xff0c;返回类型…...

Nginx 1.26.0 爆 HTTP/3 QUIC 漏洞,建议升级更新到 1.27.0

据悉&#xff0c;Nginx 1.25.0-1.26.0 主线版本中涉及四个与 NGINX HTTP/3 QUIC 模块相关的中级数据面 CVE 漏洞&#xff0c;其中三个为 DoS 攻击类型风险&#xff0c;一个为随机信息泄漏风险&#xff0c;影响皆为允许未经身份认证的用户通过构造请求实施攻击。目前已经紧急发布…...

uniadmin引入iconfont报错

当在uniadmin中引入iconfont后&#xff0c;出现错误&#xff1a; [plugin:vite:css] [postcss] Cannot find module ‘E:/UniAdmin/uniAdmin/static/fonts/iconfont.woff2?t1673083050786’ from ‘E:\UniAdmin\uniAdmin\static\fonts\iconfont.css’ 这是需要更改为绝对路径…...

Vue3【三】 使用TS自己编写APP组件

Vue3【三】 使用TS自己编写APP组件 运行截图 目录结构 注意目录层级 文件源码 APP.vue <template><div class"app"><h1>你好世界!</h1></div> </template><script lang"ts"> export default {name:App //组…...

数字IC后端物理验证PV | TSMC 12nm Calibre Base Layer DRC案例解析

基于TSMC 12nm ARM A55 upf flow后端设计实现训练营将于6月中旬正式开班&#xff01;小班教学&#xff01;目前还有3个名额&#xff0c;招满为止&#xff01;有需要可以私信小编 ic-backend2018报名。吾爱IC社区所有训练营课程均为直播课&#xff01; 这个课程支持升级成双核A…...

Echarts 在指定部分做文字标记

文章目录 需求分析1. demo1样式调整2. demo22. demo3 定位解决需求 实现在Echarts的折线图中,相同Y值的两点之间显示’abc’ 分析 1. demo1 使用 ECharts 的 markLine 功能来在相邻两个点之间添加标记。其中,我们通过设置标记的 yAxis 和 label 来控制标记的位置和显示内…...

MAA:明日方舟游戏日常任务的自动化解放方案

MAA&#xff1a;明日方舟游戏日常任务的自动化解放方案 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.com/G…...

权威榜单|2026年新手必选无人机推荐

推荐1&#xff1a;博坦ATOM2S产品概述与核心亮点博坦ATOM2S是一款专为新手用户设计的无人机&#xff0c;具有简单易用的操作系统和智能飞行功能。其搭载高清摄像头&#xff0c;可以拍摄高质量的4K视频&#xff0c;满足用户对画质的基本需求。ATOM2S还配备了智能跟随、航点飞行等…...

终极指南:在Linux系统上快速部署Photoshop CC 2022完整解决方案

终极指南&#xff1a;在Linux系统上快速部署Photoshop CC 2022完整解决方案 【免费下载链接】Photoshop-CC2022-Linux Installer from Photoshop CC 2021 to 2022 on linux with a GUI 项目地址: https://gitcode.com/gh_mirrors/ph/Photoshop-CC2022-Linux 想在Linux系…...

Midscene.js完整指南:5分钟掌握视觉驱动的AI自动化测试

Midscene.js完整指南&#xff1a;5分钟掌握视觉驱动的AI自动化测试 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js是一款革命性的AI驱动、视觉驱动的…...

第三方令牌泄露引发的供应链数据泄露治理研究 —— 以 Zara 事件为例

摘要 2026 年 4 月&#xff0c;黑客组织 ShinyHunters 通过入侵云分析服务商 Anodot 并窃取其身份认证令牌&#xff0c;非法访问下游多家企业云数据平台&#xff0c;导致快时尚品牌 Zara 近 19.7 万名用户信息泄露&#xff0c;泄露字段含电子邮箱、订单 ID、商品 SKU 及客服工单…...

如何在Windows 11上实现macOS风格的三指拖拽:ThreeFingerDragOnWindows完整指南

如何在Windows 11上实现macOS风格的三指拖拽&#xff1a;ThreeFingerDragOnWindows完整指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirro…...

发现开源神器:三步解锁卡车模拟器的智能驾驶新纪元

发现开源神器&#xff1a;三步解锁卡车模拟器的智能驾驶新纪元 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist 你是否曾梦想在…...

别再死记硬背了!用数字电路里的‘上升沿’和‘下降沿’来理解epoll的ET模式(附Linux C++代码演示)

从数字电路到高性能IO&#xff1a;用硬件思维理解epoll的边沿触发模式 当你在示波器上观察一个时钟信号时&#xff0c;工程师们最关心的往往不是电平本身的高低&#xff0c;而是电平跳变的瞬间——那个被称为"边沿"的微妙时刻。这种硬件设计中的经典概念&#xff0c;…...

英文论文AI率从97%降至8%:6款工具横测,这款神器绝不打乱排版!

前阵子我文章有两页的英文检测ai率居然冲到了97% 。我当时也是整个人都傻了。 作为一名每天和各种内容辅助工具打交道的博主&#xff0c;我太理解大家面对那张通红的检测报告时的心情。 既然大家都面临英文降ai这个难题&#xff0c;今天咱们就抛开那些虚头巴脑的理论&#xf…...

博主介绍以及联系方式获取点我进入

目录博主介绍项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作博主介绍 开发技术范围&#xff1a;uniapp框架,Android,Kotlin框架,koa框架,express框架,go语言,laravel框架,thinkphp框架,springcloud,django,flask框架,SpringBo…...