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中的文件读写相关的内容,掌握了文件处理中的读写删追等基本操作,怎么样,你坤哥厉不厉害!

相关推荐
小小码农Come on5 分钟前
C++访问QML控件-----QML访问C++对象属性和方法
java·开发语言·c++
墨澜逸客6 分钟前
《华胥文化》百回大纲
学习·其他·百度·学习方法·新浪微博
Stella Blog6 分钟前
狂神Java基础学习笔记Day04
java·笔记·学习
一只机电自动化菜鸟11 分钟前
一建机电备考笔记(17) 常用设备—通用设备1(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
深蓝海拓15 分钟前
基于QtPy (PySide6) 的PLC-HMI工程项目(十)框架初成的阶段总结
网络·笔记·python·学习·ui·plc
菜鸟‍20 分钟前
【论文学习】Transformer中的数据流动
深度学习·学习·transformer
代码中介商22 分钟前
C语言函数完全指南:从基础到实践
c语言·开发语言
思茂信息35 分钟前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
lolo大魔王41 分钟前
Go语言的反射机制
开发语言·后端·算法·golang
那个失眠的夜1 小时前
AspectJ
java·开发语言·数据库·spring