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

k97glaaz  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(144)

我按照代码从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);
   |              ^^^^^^^^^^^^^^ method not found in `std::result::Result<std::fs::File, std::io::Error>`

我哪里做错了?

lyfkaqu1

lyfkaqu11#

让我们看看您的错误消息:

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);
   |              ^^^^^^^^^^^^^^ method not found in `std::result::Result<std::fs::File, std::io::Error>`

错误消息和tin上的内容差不多--类型Result没有没有方法read_to_string,这实际上是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这一章将是非常相关的。我认为这些文档是一流的!

ulmd4ohb

ulmd4ohb2#

如果您的方法返回Result<String, io::Error>,则可以在返回Result的函数上使用?

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>,则必须使用accepted answer中提到的expect处理错误情况,或者在Result上进行匹配并出现异常:

let file = File::open(&opt_raw.config);

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

有关详细信息,请参阅Recoverable Errors with Result

相关问题