Я пытаюсь использовать fs::read_dir(), перебирать результаты и добавлять все имена файлов в массив. Что-то вроде этого, но это не работает:
let mut result: Vec<&str> = Vec::new();
for i in fs::read_dir(directory).iter(){
result.append(i);
}
Я перепробовал буквально все, что мог найти в Интернете, но я совершенно новичок в Rust и не совсем понимаю, что делаю. ПРИМЕЧАНИЕ. Параметр каталога должен быть строковым типом, поскольку я работаю с Tauri, а TypeScript/JavaScript имеет только обычную строку, а не какой-то другой сумасшедший тип, который, как я мог себе представить, есть в Rust.
Простой пример:
use std::ffi::OsStr;
use std::fs;
fn main() {
let mut result: Vec<String> = Vec::new();
for i in fs::read_dir(".").unwrap() {
let i = i.unwrap().path();
let file_name = i.file_name().and_then(OsStr::to_str).unwrap();
result.push(file_name.to_string());
}
dbg!(result);
}
append()
имеет смысл только при объединении двух коллекций. Используйте push()
. read_dir()
верните Result
, вам нужно сначала проверить результат, чтобы использовать Iterator
.
@ dfsg76 dfsg76 может произойти много ошибок, каталог станет недоступным, поврежденная запись, возможно, какая-то странная вещь.
Интересно, почему каждый элемент в самом итераторе имеет тип Result, поэтому развертку нужно вызывать для каждого
i
в результате fs::read_dir()? К каким ошибкам мне следует быть готовым на уровне одного файла?