new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南

ab15716721a26c69c3477cf7ec5586a9.png

Rust 中,文件读写处理简单而高效。代码也很紧凑,容易阅读。我们从读取文件的字符串行、避免读取写入同一文件、使用内存映射随机访问文件这三个文件处理中的典型案例来了解一下。

d33125a3fe5a2929c2a052104dea2edc.png

文件处理场景大家都很熟悉,因此闲言少叙,直接看代码。

读取文件的字符串行

我们向文件写入三行信息,然后使用 BufRead::lines 创建的迭代器 Lines 读取文件,一次读回一行。File 模块实现了提供 BufReader 结构体的 Read trait。File::create 打开文件 File 进行写入,File::open 则进行读取。

use std::fs::File;use std::io::{Write, BufReader, BufRead, Error};fn main() -> ResultError> {    let path = "lines.txt";    let mut output = File::create(path)?;    write!(output, "Rust\n?\nFun")?;    let input = File::open(path)?;    let buffered = BufReader::new(input);    for line in buffered.lines() {        println!("{}", line?);    }    Ok(())}

文件处理中避免读写同一文件

对文件使用 same_file::Handle 结构体,可以测试文件句柄是否等同。在本实例中,将对要读取和写入的文件句柄进行相等性测试。

use same_file::Handle;use std::fs::File;use std::io::{BufRead, BufReader, Error, ErrorKind};use std::path::Path;fn main() -> Result {    let path_to_read = Path::new("new.txt");    let stdout_handle = Handle::stdout()?;    let handle = Handle::from_path(path_to_read)?;    if stdout_handle == handle {        return Err(Error::new(            ErrorKind::Other,            "You are reading and writing to the same file",        ));    } else {        let file = File::open(&path_to_read)?;        let file = BufReader::new(file);        for (num, line) in file.lines().enumerate() {            println!("{} : {}", num, line?.to_uppercase());        }    }    Ok(())}

使用内存映射随机访问文件

使用 memmap 创建文件的内存映射,并模拟文件的一些非序列读取。使用内存映射意味着您仅需索引一个切片,而不是使用 seek 方法来导航整个文件。

map::map 函数假定内存映射后的文件没有被另一个进程同时更改,否则会出现竞态条件。

use memmap::Mmap;use std::fs::File;use std::io::{Write, Error};fn main() -> ResultError> {    write!(File::create("content.txt")?, "My hovercraft is full of eels!")?;    let file = File::open("content.txt")?;    let map = unsafe { Mmap::map(&file)? };    let random_indexes = [0, 1, 2, 19, 22, 10, 11, 29];    assert_eq!(&map[3..13], b"hovercraft");    let random_bytes: Vec = random_indexes.iter()        .map(|&idx| map[idx])        .collect();    assert_eq!(&random_bytes[..], b"My loaf!");    Ok(())}

以上实例代码都是完整的、可独立运行的程序,因此你可以直接复制它们到自己的项目中进行试验。

如果希望从头了解如何运行上述实例代码,请参考《Rust 实践指南》中关于本书-如何使用本书实例部分。也可以复制链接:http://budshome.com/rust-cookbook/about.html0872c548dbdf50fbe88ab710a862bd11.png 点击阅读原文进行更详细的学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 打印文件名_在Python中打印文件名,关闭状态和文件模式

python 打印文件名Prerequisite: Opening, closing a file/open(), close() functions in Python 先决条件: 在Python中打开,关闭文件/ open(),close()函数 1)文件名(file_object.name) (1) File name (file_object.name)) To get the file …

linux搭建直播步骤,Linux 下 nginx + rtmp 搭建直播服务

简单粗暴直接上步骤吧:注 : 以下示例使用的是nginx(版本1.15.3) rtmp(版本1.2.1)下载nginx和rtmp模块下载nginx解压​ tar xvf nginx-1.15.3.tar.gz下载nginx rtmp模块解压​ tar xvf v1.2.1进入nginx目录​ cd nginx-1.15.3执行:#--add-module 指向rtmp模块目录,ad…

【Maven学习笔记(二)】Maven的安装与配置

为什么80%的码农都做不了架构师&#xff1f;>>> 1、默认本地仓库路径 C:\Users\97449\.m2\repository 2、修改本地仓库路径 打开D:\apache-maven\conf\settings.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apa…

npm 全局安装vuecli报错_cnn explainer本地使用--被npm坑惨

最近在知乎上面看到&#xff0c;看到一个cnn解释器&#xff0c;把每个步揍都很清楚的展示了出来&#xff0c;我想自己搞来玩玩。第一次使用npm&#xff0c;很多地方不会&#xff0c;第一步&#xff1a;先在网页上下载下来cnn_explainer&#xff0c;然后解压在没有中文路径的文件…

Python程序从给定的N个数字中找到最大倍数

Here, we will be framing code for finding the maximum multiple of a number x from a given set of a number (set of 5 numbers in this program). 在这里&#xff0c;我们将使用成帧代码&#xff0c; 从给定的一组数字(此程序中的5个数字组成的集合)中找到x的最大倍数 。…

ubuntu linux本地源,如何制作UbuntuLinux操作系统的本地源?

最简单制作本地源的方法&#xff1a;在packs文件夹中有如下两种类型的包&#xff1a;一种是。deb包(全部的依赖包和软件包)&#xff0c;另一种是Packages。gz着重介绍一下第二个类型的包&#xff1a;在这个包中包含了必需的软件包列表和依赖信息。这个包是后生成的&#xff0c;…

openmpi安装_Intel Parallel Studio XE 2019安装设置

1.Intel Parallel Studio XE 2019简介Intel Parallel Studio XE 是Intel在单独一款软件开发套件中整合了英特尔公司业界领先的 C/C 和 Fortran 编译器、性能和MPI并行库、错误检查、代码健壮和性能分析的工具&#xff0c;有助于大幅提升应用程序性能&#xff0c;同时提高代码质…

Python | 在列表中指定索引处添加元素的程序

Given a list and we have to add an element at specified index in Python. 给定一个列表&#xff0c;我们必须在Python中的指定索引处添加一个元素。 list.appened() Method is used to append/add an element at the end of the list. But, if we want to add an element …

Linux九大哲学原理,Linux/Unix设计思想(全新阐释开源哲学,Jon “maddog” Hall作序推荐)...

《Linux/Unix设计思想》第1章  Unix哲学&#xff1a;集思广益的智慧    11.1  NIH综合征    21.2  Unix的开发    21.3  Linux&#xff1a;一个人加上一百万人的智慧    41.4  Unix哲学概述    5第2章  人类的一小步    92.1  准则1&#xff1a;小即是美  …

[Android] 开源View组件(一)

Material Design系列&#xff0c;自定义Behavior实现Android知乎首页 仿今日头条最强顶部导航指示器&#xff0c;支持6种模式 MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器 Android 优雅的为RecyclerView添加HeaderView和FooterView Android …

sql server修改字段编码格式_关于MySQL如何修改character_set_client的编码问题

问题引入&#xff1a;我们经常会遇到一些向MySQL数据库中插入中文&#xff0c;但是select出来的时候&#xff0c;却发现是乱码的情况。如我们向表a出入这样一段记录&#xff1a;iinsert into a values(‘你好helloworld你好’,’helloworld’);可能当你访问它的时候&#xff0c…

通用apdu指令_8086微处理器中的通用指令格式

通用apdu指令Introduction: 介绍&#xff1a; In this article, we are going to discuss about the 6 general formats of instructions. 在本文中&#xff0c;我们将讨论6种通用指令格式。 One byte instruction: 一字节指令 &#xff1a; This is only one byte long an…

Linux中断不能进行任务调度,关中断是否禁止任务调度?关中断能作为互斥吗?...

今天再看《嵌入式软件系统教程》((美)西蒙 著&#xff0c;陈向群 等译) &#xff0c;里面讲到关中断会关了任务调度&#xff0c;作者没说原因&#xff0c;我也不知道为什么&#xff0c;所以查了查网络。在这个网址http://www.hqwic.com/bbs/topic.aspx?topicid11253上有一个讨…

Win10系统怎样让打开图片方式为照片查看器

打开注册表编辑器之后&#xff0c;我们双击左侧的目录&#xff0c;依次打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft目录&#xff0c;如下图所示。 在Microsoft目录下&#xff0c;我们需要找到Windows Photo Viewer\Capabilities\FileAssociations目录项&#xff0c;直到看到该子…

python爬虫开发 从入门到实战 pdf 谢乾坤_python字符串和整数相互转换的实例分享...

python 字符串和整数的转换方法数字转成字符串方法一&#xff1a;使用格式化字符串:tt322tem%d %tttem即为tt转换成的字符串常用的格式化字符串&#xff1a;%d 整数%f%F 浮点数%e%E 科学计数%g%G e 和%f/%E 和%F 的简写%% 输出%格式化操作符辅助指令符号 作用* 定义宽度或者小数…

c语言插入排序算法_插入排序算法,流程图和C,C ++代码

c语言插入排序算法In the last article, we discussed about the bubble sort with algorithm, flowchart and code. In this article, we are going to discuss about another basic sorting technique i.e. insertion sort. 在上一篇文章中&#xff0c;我们讨论了用算法&…

EF使用CodeFirst方式生成数据库技巧经验

前言 EF已经发布很久了&#xff0c;也有越来越多的人在使用EF。如果你已经能够非常熟练的使用EF的功能&#xff0c;那么就不需要看了。本文意在将自己使用EF的方式记录下来备忘&#xff0c;也是为了给刚刚入门的同学一些指导。看完此文&#xff0c;你应该就学会以CodeFirst的方…

java jar包示例_Java包getImplementationVersion()方法和示例

java jar包示例包类的getImplementationVersion()方法 (Package Class getImplementationVersion() method) getImplementationVersion() method is available in java.lang package. getImplementationVersion()方法在java.lang包中可用。 getImplementationVersion() method …

c语言中字母的定义,c语言字符串定义与初始化 - 且听风吟

字符串的两种定义方式char数组char sa[] “hello world”;char指针char *sp “hello world”;这两种方式都产生了一个”hello world”的字符串常量,字符串常量存储在静态存储区中&#xff0c;静态存储区中的内容在程序运行的整个过程中都存在&#xff0c;而且只存储一份。数组…

python计算两字符串中的位置_python – 计算两个字符串之间距离的算法

是否有任何字符串距离算法没有考虑到单词的顺序&#xff1f;以下算法未提供所需结果(在该示例中,所需结果应为1)&#xff1a;import jarojaro.jaro_winkler_metric(uMichael Jordan,uJordan Michael)>>>0.47import LevenshteinLevenshtein.ratio(Michael Jordan,Jorda…