无法索引`std::fs::ReadDir`类型的值

问题描述 投票:0回答:1

我正在尝试获取目录中第一个条目的路径,但似乎

read_dir
响应类型
ReadDir
是一个迭代器,无法索引,例如

fn get_single_file_or_none(dir_path: &PathBuf) -> Result<Option<PathBuf>, io::Error> {
    let entries = fs::read_dir(dir_path)?;

    if entries.count() == 1 {
        let path = entries[0].path();
//                        ^^ cannot index into a value of type `std::fs::ReadDir`
        return Ok(path);
    }

    return Ok(None);
}

如何获取目录中第一个(在本例中是唯一一个)条目的路径?

我无法开始迭代条目,因为我知道只有一个条目,并返回我点击的第一个条目。这是唯一的解决方案吗?例如

if entries.count() == 1 {
    for entry_res in entries {
        return match entry_res {
            Err(er) => Err(er),
            Ok(en) => Ok(Some(en.path())),
        };
    }
}
rust iterator
1个回答
0
投票

您只需在迭代器上调用一次

next()
即可获取第一个条目,如果没有条目,则调用
None
。不需要打电话
count()

use std::{fs, io, path::PathBuf};

fn get_single_file_or_none(dir_path: &PathBuf) -> io::Result<Option<PathBuf>> {
    let mut entries = fs::read_dir(dir_path)?;

    if let Some(entry) = entries.next() {
        return Ok(Some(entry?.path()));
    }

    return Ok(None);
}
© www.soinside.com 2019 - 2024. All rights reserved.