如何将& Path的最终组件拆分为特定字符?

时间:2016-05-21 21:16:44

标签: rust filenames

我有一个&Path,我需要在第一个冒号处将最终的组件文件名分成两部分。

我可以将最后一个组件作为&OsStrpath.file_name()) - 但后来我实际上对内容做了一些事情。 documentation给了我一些选择:

  • to_str()to_string_lossy(),如果它不是UTF-8(不保证!),则会失败或返回损坏的字符串。
  • to_bytes()to_cstring(),但自Rust 1.6以来,它们已被标记为已弃用。
  • 在底部,我看到impl OsStrExt使用as_bytes()方法。 OsStrExtstd::os::unix::ffi::OsStrExt,其被描述为"针对OsStr"的特定于Unix的扩展。但是std::os::unix显然是" Unix平台std的实验性扩展。"

我错过了更多标准吗?

碰巧我很高兴为这个应用程序限制Unix,所以OsStrExt::as_bytes看起来像现在最好的选择;但它真的还在试验性,还是文件过时了?

1 个答案:

答案 0 :(得分:2)

没有标准的方法来处理文件系统路径,因为并非所有平台都有关于路径表示和有效性的相同规则。

在基于Unix的系统(Linux,Mac OS X等)上,路径是一个不能包含空字节的字节序列(u8)。 std::os::unix模块可在这些平台上使用。虽然模块的描述是“实验性的”,但大多数都是稳定的,因此保证稳定的功能在将来的Rust 1.x版本中仍然可用。

在Windows NT上,路径是一系列16位字(通常被解释为UTF-16代码单元),可能包含不成对的代理。在内部,Rust将这些路径转换为WTF-8(只是UTF-8,允许编译未配对的代理,U + D800-U + DFFF)。 std::os::windows模块可在此平台上使用;它没有在Rust的文档网站上显示,但是如果你在本地构建std的文档,它应该在那里。 The source for this module is here.它提供different OsStrExt and OsStringExt traits,允许您将OsStr编码为可能格式错误的UTF-16,或将可能格式错误的UTF-16路径解码为OsString,但不提供对WTF-8表示的访问。