path - 我可以使用 `std::path::Path` 的 `strip_prefix` 来替换动态前缀吗?

标签 path rust

我有兴趣这样做的原因是因为我的路径中有一部分将保持不变,但我希望将其与其所有父部分一起删除。

所以如果我们说,

some/unknown/path/foo/bar/baz

我想回去

bar/baz

但我只知道 foo/... 的期望直接继续我关心的路径部分。

也许 strip_prefix 是错误的方法,所以如果有更好的方法来做到这一点,我当然会很感激被指出那个方向。

最佳答案

strip_prefix 不会执行您想要的操作,因为它要求您知道要去除的前缀。但是,您可以使用 iter获取路径组件的迭代器,然后使用标准的 Iterator 方法从您想要的部分构建一个新的 PathBuf

这是一个例子(try it):

let p = path::Path::new("some/unknown/path/foo/bar/baz");
let q: path::PathBuf = p.iter()   // iterate over path components
    .skip_while(|s| *s != "foo")  // skip everything before "foo"
    .skip(1)                      // skip "foo" itself
    .collect();                   // collect the rest into a PathBuf
println!("{:?}", q); // prints "bar/baz"

(这将分配一个新的 PathBufShepmaster's answer 展示了如何在不分配的情况下获取引用原始文件的 &Path。)

然后您可以使用 to_str , to_string_lossy , 或 into_os_string加上 OsString::into_string得到可以变成 String 的东西。

另请参阅:How to convert the PathBuf to String

关于path - 我可以使用 `std::path::Path` 的 `strip_prefix` 来替换动态前缀吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109230/

相关文章:

windows - Windows 10 上的环境变量太大

rust - 在结构中使用函数指针的正确方法

generics - 如何在结构本身不需要通用参数的通用impl block 中添加类型注释?

powershell - 在 PowerShell 中使用 Get-ChildItem 时,如何获得询问路径的提示?

java - Android - 获取从文件资源管理器中选择的.txt文件的真实路径

svn - 如何设置 Apache 以使用此特定 URL 配置为 SVN 提供服务?

php - 定义一个常量并在所有页面上使用它

rust - 为什么 Rust 允许在一个作用域中两次声明相同的变量名?

rust - 使用泛型时, `From` 的实现如何冲突?

rust - 如何从 stdin 读取一行?