windows - 路径::read_dir和Windows

标签 windows rust

这是一个显示目录内容的简单测试应用程序:

fn main() {
    let mut p = PathBuf::from(r"c:");
    println!("drive 1: {}", p.to_str().unwrap());
    p.push(std::path::MAIN_SEPARATOR.to_string());
    println!("drive 2: {}", p.to_str().unwrap());
    p.push(r"*.*");
    println!("drive 3: {}", p.to_str().unwrap());

    println!("root: {}", p.to_str().unwrap());
    match fs::read_dir(p) {
        Ok(x) => {
            for path in x {
                println!("path: {:?}", path);
            }
        }
        Err(why) => {
            println!("Error: {}", why);
        }
    };
}

输出为:

drive 1: c:  
drive 2: c:\  
drive 3: c:\\*.*  
walk_dir: root: c:\\*.*  
Error: The filename, directory name, or volume label syntax is incorrect. (os error 123)  
println!将遵循我的前进路径。当我从函数中引入match语句时,请原谅变量名,以使其更易于阅读。

当我将最终路径c:\*.*剪切并粘贴到带有dir的命令提示符中时,它可以按预期工作。

我知道这不是字符串的内容,而是我在做什么。

最佳答案

这是对read_dir中的输入参数的误解。

我当时以为read_dir需要一个类似于Windows dir命令行或UNIX/Linux ls命令的字符串。也就是说,我给它c:\\*.*期望c:驱动器根目录中的所有文件。

相反,read_dir只需要没有文件规范的根目录。排序/过滤将在稍后进行。

起作用的输入只是C:\\.

关于windows - 路径::read_dir和Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61646117/

相关文章:

rust - 为什么将&T转换为&mut T未定义行为?

c - Windows 中的标准输入、标准输出文件在哪里?

c++ - 相同的 C++ 代码导致 Windows 上的无限循环和 OSX 上的预期行为

rust - 为什么 impl trait 不能用于返回多个/条件类型?

rust - 配置/安装使用 Rust Cargo 作为构建系统的软件的预期/计划方式是什么?

rust - 如何定义接受任何实现默认特征的参数的函数

windows - 为什么PE需要Original First Thunk(OFT)?

windows - 为什么 Windows 使用 CR LF?

c++ - 文件本地定义

rust - 有没有办法在命令行上做类似 #![allow(unstable)] 的事情?