首页 > 其他分享 >无涯教程-Rust - 文件输入&输出

无涯教程-Rust - 文件输入&输出

时间:2024-01-25 18:31:42浏览次数:34  
标签:std 文件 教程 mut 无涯 write let file Rust

除了对控制台进行读写之外,Rust还允许对文件进行读写,File结构代表一个文件,它允许程序对文件执行读写操作, File结构中的所有方法均返回io::Result枚举的变体。

写入文件

以下程序创建文件" data.txt",create()方法用于创建文件,如果文件创建成功,该方法将返回文件句柄,最后一行 write_all 函数将在新创建的文件中写入字节,如果任何操作失败,则Expect()函数将返回错误消息。
use std::io::Write;
fn main() {
   let mut file=std::fs::File::create("data.txt").expect("create failed");
   file.write_all("Hello Learnfk".as_bytes()).expect("write failed");
   file.write_all("\nLearnFk".as_bytes()).expect("write failed");
   println!("data written to file" );
}
data written to file

从文件读取

以下程序读取data.txt文件中的内容,并将其打印到控制台,"Open"函数用于打开现有文件,文件的绝对或相对路径作为参数传递给open()函数,如果文件不存在或由于某种原因无法访问,则open()函数将引发异常。如果成功,则将此类文件的文件句柄分配给" file"变量。

"File"句柄的" read_to_string"函数用于将该文件的内容读入字符串变量。

use std::io::Read;

fn main(){
   let mut file=std::fs::File::open("data.txt").unwrap();
   let mut contents=String::new();
   file.read_to_string(&mut contents).unwrap();
   print!("{}", contents);
}
Hello Learnfk
LearnFk

删除文件

以下示例使用remove_file()函数删除文件,如果发生错误,expect()函数将返回自定义消息。

use std::fs;
fn main() {
   fs::remove_file("data.txt").expect("could not remove file");
   println!("file is removed");
}
file is removed

追加数据

append()函数将数据写入文件的末尾,这在下面给出的示例中显示-

use std::fs::OpenOptions;
use std::io::Write;

fn main() {
   let mut file=OpenOptions::new().append(true).open("data.txt").expect(
      "cannot open file");
   file.write_all("Hello Learnfk".as_bytes()).expect("write failed");
   file.write_all("\nLearnFk".as_bytes()).expect("write failed");
   println!("file append success");
}
file append success

复制文件

以下示例将文件中的内容复制到新文件。

use std::io::Read;
use std::io::Write;

fn main() {
   let mut command_line: std::env::Args=std::env::args();
   command_line.next().unwrap();
   //跳过可执行文件名
   //接受源文件
   let source=command_line.next().unwrap();
   //接受目标文件
   let destination=command_line.next().unwrap();
   let mut file_in=std::fs::File::open(source).unwrap();
   let mut file_out=std::fs::File::create(destination).unwrap();
   let mut buffer=[0u8; 4096];
   loop {
      let nbytes=file_in.read(&mut buffer).unwrap();
      file_out.write(&buffer[..nbytes]).unwrap();
      if nbytes < buffer.len() { break; }
   }
}

以 main.exe data.txt datacopy.txt 执行上述程序,执行文件时传递了两个命令行参数-

  • 源文件的路径
  • 目标存储文件

参考链接

https://www.learnfk.com/rust/rust-file-input-output.html

标签:std,文件,教程,mut,无涯,write,let,file,Rust
From: https://blog.51cto.com/u_14033984/9417215

相关文章

  • 【完整版教程】iOS混淆加固原理篇
    引言在iOS开发中,应用程序的安全性和保护显得尤为重要。由于iOS系统的开放性,一些逆向工具可以轻松地对应用程序进行反编译和分析,从而导致应用程序源代码、算法和敏感信息的泄露。为了保护应用程序的安全性,我们需要对应用程序进行混淆加固。本文将介绍iOS混淆加固的原理和常见的加......
  • 无涯教程-Rust - 输入&输出
    本章讨论如何接受来自标准输入Input的值以及如何将值显示到标准输出Output,在本章中,我们还将讨论传递命令行参数。读和写Rust的input和output标准库函数围绕两个特征进行组织-Read读Write写Sr.NoTrait&描述Example1Read- 实现Read的类型具有面向字节输入的方法。S......
  • Spring的事务使用教程
    什么是事务?事务(Transaction)是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果操作之间有一个失败所有操作都失败。事务四个特性(ACID)原子性一组操作要么都成功,要么都失败。一致性一组数据从事务1合法状态转为事务2的另一种合法状态,就是一致。隔离性事务1......
  • 25从零开始用Rust编写nginx,序列化之serde是如何工作的
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy序......
  • 无涯教程-Rust - 错误处理
    在Rust中,错误可以分为两大类,如下表所示。Name&描述UsageRecoverable可恢复的错误ResultenumUnRecoverable无法恢复的错误panicmacro与其他编程语言不同,Rust没有Exception异常,它返回可恢复错误的枚举Result<T,E>,如果程序遇到不可恢复的错误,则调用panic宏。Panic......
  • Rust 一个 I/O 项目:构建一个命令行程序
    本篇在原文基础上有删减和添加,增加了一些细节内容,原文请参考一个I/O项目:构建一个命令行程序。目录接受命令行参数读取参数值将参数值保存进变量读取文件重构改进模块性和错误处理二进制项目的关注分离提取参数解析器组合配置值使用clone的权衡取舍创建一个Config的构造函数......
  • 【精品教程】如何查看iOS崩溃日志
    简介当一个应用程序崩溃,会产生一个崩溃报告(crashreport),并存储到设备中。崩溃报告描述了应用程序崩溃的条件,通常包含每个执行线程的完整回溯。查看崩溃报告可以帮助我们了解应用程序的崩溃情况,并尝试修复问题。符号化崩溃报告崩溃报告需要进行符号化(symbolicated),才能够进行分析......
  • 教程|幻兽帕鲁服务器数据备份与恢复
    搭建幻兽帕鲁个人服务器,最近不少用户碰到内存不足、游戏坏档之类的问题。做好定时备份,才能轻松快速恢复游戏进度这里讲一下如何定时将服务器数据备份到腾讯云轻量对象存储服务,以及如何在有需要的时候进行数据恢复。服务器中间的数据迁移,也可以参考本指南,免去手动拷贝数据,直接使用......
  • rust使用lazy_static对全局变量多线程并发读写示例
    首先需要在项目依赖Cargo.toml添加lazy_static依赖项[dependencies]lazy_static="1.4.0"示例代码如下:uselazy_static::lazy_static;usestd::sync::{RwLock,RwLockReadGuard,RwLockWriteGuard};usestd::thread;#[derive(Debug)]structSharedData{data:Vec<......
  • 无涯教程-Rust - 元组(Tuple)
    元组是复合数据类型,标量类型只能存储一种类型的数据,如一个i32变量只能存储一个整数值。在复合类型中,我们可以存储多个值,并且可以是不同类型。元组的长度是固定的,一旦声明,它们就无法增长或缩小,元组索引从0开始。Tuple-语法//语法1lettuple_name:(data_type1,data_type2,d......