Rust基础学习-Rust中的文件操作

文件结构

Rust中,std::fs::File 结构体代表一个文件。它允许我们对文件执行读/写操作。文件 I/O 是通过提供与文件系统交互的功能的 std::fs 模块执行的。

File 结构体中的所有方法都返回std::io::Result的变体,或者简单地是 Result 枚举。这里会涉及到Rust中文件几个基本操作:

  • 打开文件
  • 从文件读取
  • 写入文件
  • 删除文件
  • 追加到文件

打开文件

Rust中,可以使用File::open()方法来打开一个指定文件,函数接收一个文件路径作为参数并返回一个文件对象,如果文件不存在,将会返回一个Err,看个例子:

rust 复制代码
use std::fs::File;

fn main() {
    let datas = File::open("data.txt");

    let file_data = match datas {
        Ok(file) => file,
        Err(error) => panic!("error:{:?}", error),
    };

    println!("Data file :{:?}", file_data);
}
  • 在程序顶部,我们导入模块 std::fs::File 以使用文件 I/O 函数。

  • 要打开一个文件,我们调用 File::open("data.txt"),该函数会读取本地文件系统中的 data.txt 文件。

  • open() 函数返回一个 Result 枚举,该枚举要么返回 File 对象,要么返回 Err

  • 然后,我们对 data_result 变量进行模式匹配,如果打开文件时出现错误,就会调用 panic!。如果打开文件没有错误,我们将输出 File 对象。

运行程序会打印读取到的文件对象,如果存在的花。


读取文件

读取文件,可以使用Rust提供的read_to_string()方法,该方法实现了std::io::Read.它会读取直到文件结束(EOF)的所有字节,并将其复制到一个可变字符串。

rust 复制代码
use std::fs::File;
use std::io::Read;
fn main() {
    let mut datas = File::open("data.txt").unwrap();

    let mut file_content = String::new();

    datas.read_to_string(&mut file_content).unwrap();

    println!("file content :{:?}", file_content);
}
  • 在这里,我们导入两个模块:std::fs::File std::io::Read 用于读取文件。

  • 我们首先打开文件 data.txt,并将其结果绑定到一个名为 data_file 的变量。

  • 打开文件后,我们使用 read_to_string() 方法,该方法将一个空的可变字符串 file_content 作为参数,并将文件 data.txt 的内容复制到 file_content 中。


文件写入

使用write()方法写入文件,该方法来自std::io::Write标准库。

rust 复制代码
use std::fs::File;
use std::io::{Read, Write};
fn main() {
    let mut data_file = File::create("data.txt").expect("creation failed");

    data_file
        .write("怎么样,你鸡哥厉不厉害!".as_bytes())
        .expect("write error");

    println!("写入完成!");
}
  • 导入std::fs::Filestd::io::Write 模块来写入文件。
  • 首先使用 File::create("data.txt") 方法创建一个名为data.txt的文件,并将其绑定到可变变量 data_file
  • 创建文件后,我们使用 write() 方法向文件中写入内容。

这种方式写入文件,新的内容会将之前文件中的内容覆盖。


删除文件

rust 复制代码
use std::fs;

fn main() {
    // Remove a file
    fs::remove_file("data.txt").expect("could not remove file");
    
    println!("Removed file data.txt");
}
  • 导入 std::fs 模块来删除一个文件。
  • 使用 remove_file() 方法来删除文件 data.txt。如果操作无法继续,我们返回一个自定义消息:在出现错误的情况下无法删除文件。
  • 如果找不到文件data.txt或无法删除,将会遇到错误。

追加写入

要在Rust中以追加的模式写入文件,可以使用std::OpenOptions中的append()方法实现,看代码:

rust 复制代码
use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
fn main() {
    let mut data_file = OpenOptions::new()
        .append(true)
        .open("data.txt")
        .expect("connot open file");

    data_file
        .write("鸡你太美!".as_bytes())
        .expect("write failed!");

    println!("文件追加成功!");
}
  • 在这里导入 std::fs::OpenOptionsstd::io::Write 模块用于向文件追加。

  • OpenOptions::new() append(true) 方法打开文件data.txt以进行追加。

  • 接下来,我们使用来自 File 对象的 write() 方法向文件写入额外内容。

  • 为了处理错误,我们将 expect() 方法与自定义错误消息链接。


小结

本文使用理论加案例的方式快速学习了Rust中的文件读写相关的内容,掌握了文件处理中的读写删追等基本操作,怎么样,你坤哥厉不厉害!

相关推荐
虾球xz22 分钟前
游戏引擎学习第288天:继续完成Brains
c++·学习·游戏引擎
Y31742922 分钟前
Python Day27 学习
python·学习·机器学习
建鼎呓语28 分钟前
使用国内源加速Qt在线安装
开发语言·qt
漫谈网络31 分钟前
Python 包管理工具 uv
开发语言·python·uv
fashia32 分钟前
Java转Go日记(三十六):简单的分布式
开发语言·分布式·后端·zookeeper·golang·go
秃头小白菜1 小时前
Python之三大基本库——Matplotlib
开发语言·python·matplotlib
流星白龙1 小时前
【C++算法】70.队列+宽搜_N 叉树的层序遍历
开发语言·c++·算法
The_cute_cat1 小时前
25.5.20学习总结
学习
流星白龙1 小时前
【C++算法】69.栈_验证栈序列
开发语言·c++·算法
Luis Li 的猫猫1 小时前
MATLAB跳动的爱心
开发语言·算法·matlab