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

相关推荐
珂朵莉MM3 分钟前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
香蕉炒肉18 分钟前
Java优化:双重for循环
java·开发语言
傍晚冰川36 分钟前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
PingdiGuo_guo38 分钟前
C++智能指针的知识!
开发语言·c++
黄雪超38 分钟前
JVM——打开JVM后门的钥匙:反射机制
java·开发语言·jvm
维维酱1 小时前
Rust - 互斥锁
rust
我命由我123451 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
维维酱1 小时前
Rust - 共享状态的并发
rust
Rocky4011 小时前
JAVAEE->多线程:锁策略
java·开发语言·jvm
JSUITDLWXL1 小时前
ideal2022.3.1版本编译项目报java: OutOfMemoryError: insufficient memory
java·开发语言