Rust ?运算符 Rust读写txt文件

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

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

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

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

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

二、Rust读写txt文件

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

rust 复制代码
use std::fs::{self, OpenOptions};

let file = OpenOptions::new()
        .read(true)
        .write(true)
        .create(true)
        .append(true)
        .open(filepath)?;
三、Rust实例测试

main.rs

rust 复制代码
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文件内容如下:

rust 复制代码
白日依山尽,
黄河入海流。

运行效果如下:

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

rust 复制代码
hello
word

相关推荐
我不会编程55514 分钟前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄15 分钟前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
用户967151139167217 分钟前
Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案
rust·ffmpeg
无名之逆40 分钟前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010140 分钟前
rust 同时处理多个异步任务
java·数据库·rust
似水এ᭄往昔1 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙1 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
xixixin_1 小时前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript
W_chuanqi1 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
anlogic1 小时前
Java基础 4.3
java·开发语言