如何使用`read_line()`检查EOF?

mka*_*ito 12 rust

鉴于以下代码,我如何专门检查EOF?或者更确切地说,我如何区分"这里什么也没有"和"爆炸"?

match io::stdin().read_line() {
    Ok(l) => print!("{}", l),
    Err(_) => do_something_else(),
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 12

从以下文档read_line:

如果成功,此函数将返回读取的总字节数.

返回的空缓冲区[ sic ]表示流已达到EOF.

这意味着我们可以检查零的成功值:

use std::io::{self, BufRead};

fn main() -> io::Result<()> {
    let mut empty: &[u8] = &[];
    let mut buffer = String::new();

    let bytes = empty.read_line(&mut buffer)?;
    if bytes == 0 {
        println!("EOF reached");
    }

    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

  • 不处理空行情况(至少在 2018 版的 Windows 中不处理)。您还需要检查文件大小。 (4认同)