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.pswp.cn/news/542421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542421.shtml
英文地址,請注明出處:http://en.pswp.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…