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

Rust ?运算符 Rust读写txt文件

一、Rust ?运算符
?运算符:传播错误的一种快捷方式。
  • 如果Result是Ok:Ok中的值就是表达式的结果,然后继续执行程序。

  • 如果Result是Err:Err就是整个函数的返回值,就像使用了return

?运算符只能用于返回Result的函数。
?运算符与main函数
  • main函数返回类型是:()

  • main函数的返回类型也可以是:Result<T,E>

  • Box是trait对象,简单理解:“任何可能的错误类型”

二、Rust读写txt文件

Rust可以对txt文件读、写、创建、添加、打开操作。

use std::fs::{self, OpenOptions};let file = OpenOptions::new().read(true).write(true).create(true).append(true).open(filepath)?;
三、Rust实例测试

main.rs

use std::fs::{self, OpenOptions};
use std::io::{BufRead, BufReader, BufWriter, Write};fn main() -> Result<(), Box<dyn std::error::Error>> {let filepath = "test1.txt";let filepath2 = "test2.txt";let str = read_file_string(filepath);println!("{:#?}", str);let vec = read_file_vec(filepath);println!("{:#?}", vec);read_file_buffer(filepath)?;write_file_buffer(filepath2)?;Ok(())
}//将整个文件作为字符串读取
fn read_file_string(filepath: &str) -> Result<String, Box<dyn std::error::Error>> {let data = fs::read_to_string(filepath)?;Ok(data)
}//将整个文件作为Vector读取
fn read_file_vec(filepath: &str) -> Result<Vec<u8>, Box<dyn std::error::Error>> {let data = fs::read(filepath)?;Ok(data)
}//BufReader按行读取
fn read_file_buffer(filepath: &str) -> Result<(), Box<dyn std::error::Error>> {let file = OpenOptions::new().read(true).open(filepath)?;let reader = BufReader::new(file);//按行读取for line in reader.lines() {let str: String = line.unwrap();println!("{}", str);}Ok(())
}//BufWriter带缓冲写入
fn write_file_buffer(filepath: &str) -> Result<(), Box<dyn std::error::Error>> {let file = OpenOptions::new().create(true).append(true).open(filepath)?;let mut reader = BufWriter::new(file);// 带缓冲写入reader.write(b"hello\n")?;reader.write(b"word\n")?;//确保缓冲中的内容全部写入文件reader.flush()?;Ok(())
}

其中test1.txt文件内容如下:

白日依山尽,
黄河入海流。

运行效果如下:

在这里插入图片描述

在这里插入图片描述

生成的test2.txt文件,内容如下:

hello
word

相关文章:

  • ChatGPT高效提问—prompt实践(白领助手)
  • Unity3D xLua开发环境搭建详解
  • 玩转网络抓包利器:Wireshark常用协议分析讲解
  • 物联网和人工智能的融合
  • 【鸿蒙系统学习笔记】TypeScript开发语言
  • go-zero/grpc的rpc服务间传递额外数据
  • 前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍
  • 在VS里使用C#制作窗口应用
  • Hive 最全面试题及答案(基础篇)
  • Python系列(19)—— 条件语句
  • 汽车会撞死人,应不应该限制汽车?
  • Maven的下载安装配置教程
  • 昇腾ACL应用开发之模型转换ATC
  • unity学习(34)——角色选取界面(跨场景坑多)
  • MySQL 多表操作
  • JS 中的深拷贝与浅拷贝
  • .pyc 想到的一些问题
  • [NodeJS] 关于Buffer
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android 控件背景颜色处理
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java 最常见的 200+ 面试题:面试必备
  • js数组之filter
  • Laravel Telescope:优雅的应用调试工具
  • Logstash 参考指南(目录)
  • redis学习笔记(三):列表、集合、有序集合
  • Ruby 2.x 源代码分析:扩展 概述
  • 飞驰在Mesos的涡轮引擎上
  • 分布式熔断降级平台aegis
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 利用DataURL技术在网页上显示图片
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 驱动程序原理
  • 一道面试题引发的“血案”
  • 一起参Ember.js讨论、问答社区。
  • 移动端解决方案学习记录
  • 智能合约Solidity教程-事件和日志(一)
  • #传输# #传输数据判断#
  • #前后端分离# 头条发布系统
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (4)Elastix图像配准:3D图像
  • (ibm)Java 语言的 XPath API
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 材料检测系统崩溃分析
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net各种迷惑命名解释
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • @Bean注解详解
  • [2669]2-2 Time类的定义
  • [4.9福建四校联考]