我按照代码从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>`
我哪里做错了?
2条答案
按热度按时间lyfkaqu11#
让我们看看您的错误消息:
错误消息和tin上的内容差不多--类型
Result
没有没有方法read_to_string
,这实际上是traitRead
上的一个方法。您有一个
Result
,因为File::open(&path)
可能失败。失败用Result
类型表示。Result
可以是Ok
(成功情况)或Err
(失败情况)。您需要以某种方式处理失败的情况,最简单的方法是使用
expect
在失败时终止:您还需要将
Read
纳入范围,才能访问read_to_string
:我强烈推荐阅读The Rust Programming Language并使用其中的例子。Recoverable Errors with
Result
这一章将是非常相关的。我认为这些文档是一流的!ulmd4ohb2#
如果您的方法返回
Result<String, io::Error>
,则可以在返回Result
的函数上使用?
:如果您无法返回
Result<String, io::Error>
,则必须使用accepted answer中提到的expect
处理错误情况,或者在Result
上进行匹配并出现异常:有关详细信息,请参阅Recoverable Errors with Result。