Windows 路径::读取目录和窗口

Windows 路径::读取目录和窗口,windows,rust,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"*.*"); prin

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

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);
        }
    };
}
输出为:

驱动器1:c: 驱动器2:c:\ 驱动器3:c:\\*.* walk\u dir:root:c:\\*.* 错误:文件名、目录名或卷标语法不正确。(操作系统错误123)
println将跟随我的路径前进。请原谅变量名,因为我从函数中引入了
match
语句,使其更易于阅读

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


我知道这不是字符串的内容,而是我正在做的事情。

尝试将
PathBuf::from(r“c:”)
替换为
PathBuf::from(r“c:\”)
和/或
p.push(r“*”)带有
p.push(r“\*.*)

:

在Windows上:

  • 如果
    path
    有根但没有前缀(例如
    \windows
    ),它将替换除
    self
    的前缀(如果有)之外的所有内容
  • 如果
    path
    有前缀但没有根,它将替换
    self
:

Windows路径前缀,例如C:或\server\share


尝试将
PathBuf::from(r“c:”)
替换为
PathBuf::from(r“c:\”)
和/或
p.push(r“**”)带有
p.push(r“\*.*)

:

在Windows上:

  • 如果
    path
    有根但没有前缀(例如
    \windows
    ),它将替换除
    self
    的前缀(如果有)之外的所有内容
  • 如果
    path
    有前缀但没有根,它将替换
    self
:

Windows路径前缀,例如C:或\server\share


这是对
read\u dir
输入参数的误解

我假设
read\u dir
需要一个类似于Windows dir命令行或UNIX/Linux
ls
命令的字符串。也就是说,我给它的
c:\\*.
应该是
c:
驱动器根目录中的所有文件

相反,
read\u dir
只需要根目录,不需要文件规范。稍后将进行排序/筛选


工作的输入只是
C:\\.

这是对
read\u dir
输入参数的误解

我假设
read\u dir
需要一个类似于Windows dir命令行或UNIX/Linux
ls
命令的字符串。也就是说,我给它的
c:\\*.
应该是
c:
驱动器根目录中的所有文件

相反,
read\u dir
只需要根目录,不需要文件规范。稍后将进行排序/筛选


工作的输入只是
C:\\.
C:\*.
不是路径,而是全局模式。正如您发现自己的
read\u dir
需要一个路径一样,在您的例子中,它需要
c:\
。如果您确实需要全局模式(例如,
c:\*.txt
),您需要自己过滤
read\u dir
的输出,或者您可以使用板条箱。

c:\*.
不是路径,而是全局模式。正如您发现自己的
read\u dir
需要一个路径一样,在您的例子中,它需要
c:\
。如果您确实需要全局模式(例如,
c:\*.txt
),您需要自己过滤
read\u dir
的输出,或者您可以使用板条箱。

感谢您的快速响应。问题不在于最后一个字符串(路径确实是“C:\*.*”。“C:\*.*”是传递到变量p中的path::read\u dir中的内容(我相信)。它可能是其他内容,或者更好地说,它可能是其他内容。如果我错过了上面的要点,我很抱歉。感谢您的快速响应。问题不是最后一个字符串(路径确实是“C:\*.*”。“C:\*.*”是传递到变量p中的path::read\u dir中的内容(我相信)。它可能是其他内容,或者更好地说,它可能是其他内容。如果我没有理解上面的观点,我很抱歉。