无法将文件内容读取到字符串 - Result未在名为`read_to_string`的作用域中实现任何方法

时间:2015-03-23 16:07:43

标签: error-handling rust

我按照代码打开Rust by Example的文件:

use std::{env, fs::File, path::Path};

fn main() {
    let args: Vec<_> = env::args().collect();
    let pattern = &args[1];

    if let Some(a) = env::args().nth(2) {
        let path = Path::new(&a);
        let mut file = File::open(&path);
        let mut s = String::new();
        file.read_to_string(&mut s);
        println!("{:?}", s);
    } else {
        //do something
    }
}

但是,我收到了这样的消息:

error[E0599]: no method named `read_to_string` found for type `std::result::Result<std::fs::File, std::io::Error>` in the current scope
  --> src/main.rs:11:14
   |
11 |         file.read_to_string(&mut s);
   |              ^^^^^^^^^^^^^^

我做错了什么?

2 个答案:

答案 0 :(得分:22)

让我们看一下你的错误信息:

error[E0599]: no method named `read_to_string` found for type `std::result::Result<std::fs::File, std::io::Error>` in the current scope
  --> src/main.rs:11:14
   |
11 |         file.read_to_string(&mut s);
   |              ^^^^^^^^^^^^^^

错误信息几乎就是它所说的 - Result类型的方法read_to_string。那实际上是a method on the trait Read

您有Result,因为File::open(&path)可以失败。失败以Result类型表示。 Result可以是Ok,这是成功案例,也可以是Err,即失败案例。

你需要以某种方式处理失败案例。最简单的方法是使用expect

在失败时死亡
let mut file = File::open(&path).expect("Unable to open");

您还需要将Read纳入范围才能访问read_to_string

use std::io::Read;

我强烈建议阅读The Rust Programming Language并阅读示例。第Recoverable Errors with Result章将具有高度相关性。我认为这些文档是一流的!

答案 1 :(得分:1)

您还可以使用“?”

let mut file = File::open(&path)?;

但是在那种情况下,您的方法应该返回Result<String, io::Error>

喜欢

fn read_username_from_file() -> Result<String, io::Error> {
    let mut f = File::open("hello.txt")?;
    let mut s = String::new();
    f.read_to_string(&mut s)?;
    Ok(s)
}

如果您无法返回Result<String, io::Error>,则必须使用期望(已接受的答案中提到)或使用以下方式处理错误情况,

让文件= File :: open(&opt_raw.config);

let file = match file {                                                
    Ok(file) => file,                                                  
    Err(error) => {                                                    
        panic!("Problem opening the file: {:?}", error)                
    },                                                                 
};                                                                     

有关更多信息,请参阅此link