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/Linuxls
命令的字符串。也就是说,我给它的c:\\*.
应该是c:
驱动器根目录中的所有文件
相反,read\u dir
只需要根目录,不需要文件规范。稍后将进行排序/筛选
工作的输入只是C:\\.
这是对read\u dir
输入参数的误解
我假设read\u dir
需要一个类似于Windows dir命令行或UNIX/Linuxls
命令的字符串。也就是说,我给它的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中的内容(我相信)。它可能是其他内容,或者更好地说,它可能是其他内容。如果我没有理解上面的观点,我很抱歉。