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)
}
}
}
File::open(file_path)?
:尝试打开文件,如果失败,返回Err
。?
操作符会将错误直接返回给调用者。
file.read_to_string(&mut buffer)?
:读取文件内容到buffer
中,如果失败,返回Err
。
std::io::stdout().write_all(buffer.as_bytes())
:将文件内容写入控制台。
drop(file)
:手动提前释放文件资源,确保即使写入控制台出错,文件也能正确关闭。
- 对写入控制台的结果进行
match
,如果成功返回Ok(())
,如果失败打印错误信息并返回Err
。