我已經寫了基於該Rust docs一個非常直接的腳本:如何訪問Rust中的目錄中的文件?
use std::fs::{self, DirEntry};
use std::path::Path;
fn main() {
let path = Path::new(".");
for entry in fs::read_dir(path)? {
let entry = entry?;
let path = entry.path();
if path.is_dir() {
println!("directory found!");
}
}
}
,但我得到以下編譯錯誤約?
:
error[E0277]: the trait bound `(): std::ops::Carrier` is not satisfied
--> test.rs:6:18
|
6 | for entry in fs::read_dir(path)? {
| -------------------
| |
| the trait `std::ops::Carrier` is not implemented for `()`
| in this macro invocation
|
= note: required by `std::ops::Carrier::from_error`
error[E0277]: the trait bound `(): std::ops::Carrier` is not satisfied
--> test.rs:7:21
|
7 | let entry = entry?;
| ------
| |
| the trait `std::ops::Carrier` is not implemented for `()`
| in this macro invocation
|
= note: required by `std::ops::Carrier::from_error`
我只是部分了解?
但我知道要點是,它只有在Ok
的情況下才允許你在Result
上採取行動。這裏的錯誤是它在()
而不是Result
上使用,這很奇怪。我試圖實現循環,不?
:
use std::fs::{self, DirEntry};
use std::path::Path;
fn main() {
let path = Path::new(".");
for entry in fs::read_dir(path) {
println!("{}", entry.path());
}
}
但我得到的錯誤:
error: no method named `path` found for type `std::fs::ReadDir` in the current scope
--> test.rs:7:30
|
7 | println!("{}", entry.path());
| ^^^^
這意味着代替fs::read_dir
返回ReadDir
這是超過DirEntry
項目的迭代器,fs::read_dir
正在恢復()
這是不知怎的,迭代器通過ReadDir
項目?
我很困惑。
這也許值得一提的是,我快:rustc 1.16.0 (30cf806ef 2017-03-10)
你會發現這個沒有在目錄中訪問的文件都做:在文檔,代碼不是內部'的main() '。 –