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

相关推荐
武子康5 小时前
Java-171 Neo4j 备份与恢复 + 预热与执行计划实战
java·开发语言·数据库·性能优化·系统架构·nosql·neo4j
怪兽20146 小时前
fastjson在kotlin不使用kotlin-reflect库怎么使用?
android·开发语言·kotlin
ClearLiang6 小时前
Kotlin-协程的挂起与恢复
开发语言·kotlin
彭同学学习日志6 小时前
Kotlin Fragment 按钮跳转报错解决:Unresolved reference ‘floatingActionButton‘
android·开发语言·kotlin
海域云赵从友6 小时前
破解跨境数据传输瓶颈:中国德国高速跨境组网专线与本地化 IP 的协同策略
开发语言·php
咚咚王者6 小时前
人工智能之编程进阶 Python高级:第九章 爬虫类模块
开发语言·python
深蓝海拓7 小时前
使matplot显示支持中文和负号
开发语言·python
syt_biancheng7 小时前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
864记忆8 小时前
Qt Network 模块中的函数详解
开发语言·网络·qt
864记忆8 小时前
Qt Sql 模块中的函数详解
开发语言·网络·qt