pub enum Prefix<'a> {
Verbatim(&'a OsStr),
VerbatimUNC(&'a OsStr, &'a OsStr),
VerbatimDisk(u8),
DeviceNS(&'a OsStr),
UNC(&'a OsStr, &'a OsStr),
Disk(u8),
}
Expand description
Windows 路径前缀,例如 C:
或 \\server\share
。
Windows 使用多种路径前缀样式,包括引用驱动卷 (如 C:
)、网络共享文件夹 (如 \\server\share
) 等。
另外,某些路径前缀是 “verbatim” (即以 \\?\
前缀),在这种情况下,不 将 /
视为分隔符,并且基本上不执行规范化。
Examples
use std::path::{Component, Path, Prefix};
use std::path::Prefix::*;
use std::ffi::OsStr;
fn get_path_prefix(s: &str) -> Prefix<'_> {
let path = Path::new(s);
match path.components().next().unwrap() {
Component::Prefix(prefix_component) => prefix_component.kind(),
_ => panic!(),
}
}
assert_eq!(Verbatim(OsStr::new("pictures")),
get_path_prefix(r"\\?\pictures\kittens"));
assert_eq!(VerbatimUNC(OsStr::new("server"), OsStr::new("share")),
get_path_prefix(r"\\?\UNC\server\share"));
assert_eq!(VerbatimDisk(b'C'), get_path_prefix(r"\\?\c:\"));
assert_eq!(DeviceNS(OsStr::new("BrainInterface")),
get_path_prefix(r"\\.\BrainInterface"));
assert_eq!(UNC(OsStr::new("server"), OsStr::new("share")),
get_path_prefix(r"\\server\share"));
assert_eq!(Disk(b'C'), get_path_prefix(r"C:\Users\Rust\Pictures\Ferris"));
RunVariants§
Verbatim(&'a OsStr)
逐字前缀,例如,\\?\cat_pics
。
逐字前缀由 \\?\
组成,紧随其后是给定的组件。
VerbatimUNC(&'a OsStr, &'a OsStr)
逐字前缀使用 Windows 的 Uniform Naming Convention,例如 \\?\UNC\server\share
。
Verbatim UNC 前缀由 \\?\UNC\
组成,其后紧跟服务器的主机名和共享名。
VerbatimDisk(u8)
逐字磁盘前缀,例如 \\?\C:
。
逐字磁盘前缀由 \\?\
紧随其后的驱动器号和 :
组成。
DeviceNS(&'a OsStr)
设备命名空间前缀,例如 \\.\COM42
。
设备名称空间前缀由 \\.\
(可能使用 /
而不是 \
) 组成,后跟设备名称。
UNC(&'a OsStr, &'a OsStr)
使用 Windows 的 Uniform Naming Convention 的前缀,例如
\\server\share
.
UNC 前缀由服务器的主机名和共享名组成。
Disk(u8)
给定磁盘驱动器的前缀 C:
。
Implementations§
source§impl<'a> Prefix<'a>
impl<'a> Prefix<'a>
sourcepub fn is_verbatim(&self) -> bool
pub fn is_verbatim(&self) -> bool
确定前缀是否为逐字形式,即以 \\?\
开头。
Examples
use std::path::Prefix::*;
use std::ffi::OsStr;
assert!(Verbatim(OsStr::new("pictures")).is_verbatim());
assert!(VerbatimUNC(OsStr::new("server"), OsStr::new("share")).is_verbatim());
assert!(VerbatimDisk(b'C').is_verbatim());
assert!(!DeviceNS(OsStr::new("BrainInterface")).is_verbatim());
assert!(!UNC(OsStr::new("server"), OsStr::new("share")).is_verbatim());
assert!(!Disk(b'C').is_verbatim());
RunTrait Implementations§
source§impl<'a> PartialOrd<Prefix<'a>> for Prefix<'a>
impl<'a> PartialOrd<Prefix<'a>> for Prefix<'a>
impl<'a> Copy for Prefix<'a>
impl<'a> Eq for Prefix<'a>
impl<'a> StructuralEq for Prefix<'a>
impl<'a> StructuralPartialEq for Prefix<'a>
Auto Trait Implementations§
impl<'a> RefUnwindSafe for Prefix<'a>
impl<'a> Send for Prefix<'a>
impl<'a> Sync for Prefix<'a>
impl<'a> Unpin for Prefix<'a>
impl<'a> UnwindSafe for Prefix<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
从拥有的值中借用。 Read more