如何将PathBuf转换为String

时间:2016-05-23 10:06:44

标签: rust

我必须将PathBuf变量转换为String才能提供我的功能。我的代码是这样的:

let cwd = env::current_dir().unwrap();
let my_str: String = cwd.as_os_str().to_str().unwrap().to_string();
println!("{:?}", my_str);

它有效但cwd.as_os_str…很糟糕。 您是否有更方便的方法或有关如何处理它的任何建议?

3 个答案:

答案 0 :(得分:12)

故意不容易:String是UTF-8编码的,但PathBuf可能不是(例如在Windows上)。所以转换可能会失败。

为方便起见,还有to_strto_string_lossy方法。前者返回Option<&str>以指示可能的失败,后者将始终成功但将用U+FFFD REPLACEMENT CHARACTER替换非UTF-8字符(这就是它返回Cow<str>的原因:如果路径是已经有效的UTF-8,它将返回对内部缓冲区的引用,但如果要替换某些字符,它将为此分配一个新的String;在这两种情况下,您都可以使用into_owned if你真的需要String)。

答案 1 :(得分:7)

正如mcarton所说的并不那么简单,并非所有路径都是UTF-8编码的。但你可以使用:

p.into_os_string().into_string()

要对它进行精细控制。通过?,您可以将错误发送到较高级别,或者只是忽略它unwrap()

let my_str = cwd.into_os_string().into_string().unwrap();

关于into_string()的美妙之处在于错误包装了原始的OsString值。

答案 2 :(得分:5)

将PathBuf转换为String的一种方法是:

your_path.as_path().display().to_string();