選択肢はstd::fs::PathExt
とstd::fs::metadata
の間にあるようですが、後者はより安定しているようにしばらくお待ちください。示すようにパスが存在するかどうかを確認するには?
use std::fs;
pub fn path_exists(path: &str) -> bool {
let metadata = try!(fs::metadata(path));
assert!(metadata.is_file());
}
しかし、いくつかの奇妙な理由let metadata = try!(fs::metadata(path))
のためにまだ私は単純にブール値を返すようにしたいにもかかわらずResult<T,E>
を返す関数が必要になります。それはドキュメントをオフに基づいており、以下のように私が働いてきたコードがありますassert!(metadata.is_file())
から。
すぐにこれに多くの変更が加えられますが、try!()
の問題を回避するにはどうすればよいですか?以下は
関連するコンパイラのエラーです:
error[E0308]: mismatched types
--> src/main.rs:4:20
|
4 | let metadata = try!(fs::metadata(path));
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected bool, found enum `std::result::Result`
|
= note: expected type `bool`
found type `std::result::Result<_, _>`
= note: this error originates in a macro outside of the current crate
error[E0308]: mismatched types
--> src/main.rs:3:40
|
3 | pub fn path_exists(path: &str) -> bool {
| ________________________________________^
4 | | let metadata = try!(fs::metadata(path));
5 | | assert!(metadata.is_file());
6 | | }
| |_^ expected(), found bool
|
= note: expected type `()`
found type `bool`
あなたが見てみ ''についてこの関連する質問](http://stackoverflow.com/questions/30555477/try-does-not-compile)をお持ちですか?またはエラーハンドリングに関する[Rust Book](https://doc.rust-lang.org/book/error-handling.html)セクションを参照してください。 – Shepmaster