MST

星途 面试题库

面试题:Rust 控制台输出错误处理中的资源管理

假设在一个复杂的Rust程序中,在向控制台输出信息前需要打开一个文件读取数据,输出完成后要关闭文件。在这个过程中,如果控制台输出发生错误,如何确保文件资源能被正确释放,同时又能合理处理控制台输出错误?请使用`std::fs::File`和`std::io::{Write, Error}`等相关类型,编写一个完整的函数示例,展示如何实现这种资源管理与错误处理。
27.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fs::File;
use std::io::{Write, Error};

fn main() {
    let result = read_file_and_write_to_console("example.txt");
    match result {
        Ok(_) => (),
        Err(e) => eprintln!("An error occurred: {}", e),
    }
}

fn read_file_and_write_to_console(file_path: &str) -> Result<(), Error> {
    let mut file = File::open(file_path)?;
    let mut buffer = String::new();
    file.read_to_string(&mut buffer)?;

    let result = std::io::stdout().write_all(buffer.as_bytes());
    drop(file); // 手动提前释放文件资源

    match result {
        Ok(_) => Ok(()),
        Err(e) => {
            eprintln!("Error writing to console: {}", e);
            Err(e)
        }
    }
}
  1. File::open(file_path)?:尝试打开文件,如果失败,返回Err?操作符会将错误直接返回给调用者。
  2. file.read_to_string(&mut buffer)?:读取文件内容到buffer中,如果失败,返回Err
  3. std::io::stdout().write_all(buffer.as_bytes()):将文件内容写入控制台。
  4. drop(file):手动提前释放文件资源,确保即使写入控制台出错,文件也能正确关闭。
  5. 对写入控制台的结果进行match,如果成功返回Ok(()),如果失败打印错误信息并返回Err