路径 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 路径

The `Path` type represents file paths in the underlying filesystem. Across all platforms there is a single `std::path::Path` that abstracts over platform-specific path semantics and separators. Bring it into scope with `use std::path::Path;` when needed.

`Path` 可以从 `OsStr` 创建，并提供多种方法来获取路径所指向的文件或目录的信息。

`Path` 是不可变的。`Path` 的所有权版本是 `PathBuf`。`Path` 和 `PathBuf` 之间的关系类似于 `str` 和 `String`：`PathBuf` 可以原地修改，并且可以解引用为 `Path`。

注意，`Path` 在内部并非表示为 UTF-8 字符串，而是存储为 `OsString`。因此，将 `Path` 转换为 `&str` 并非零开销操作，且可能失败（返回一个 `Option`）。然而，`Path` 可以自由地转换为 `OsString` 或 `&OsStr`，分别使用 `into_os_string` 和 `as_os_str` 方法。

    use std::path::Path;

    fn main() {
        // 从 `&'static str` 创建一个 `Path`
        let path = Path::new(".");

        // `display` 方法返回一个可用于显示的结构体
        let _display = path.display();

        // `join` 使用操作系统特定的分隔符将路径与字节容器合并，
        // 并返回一个 `PathBuf`
        let mut new_path = path.join("a").join("b");

        // `push` 使用 `&Path` 扩展 `PathBuf`
        new_path.push("c");
        new_path.push("myfile.tar.gz");

        // `set_file_name` 更新 `PathBuf` 的文件名
        new_path.set_file_name("package.tgz");

        // 将 `PathBuf` 转换为字符串切片
        match new_path.to_str() {
            None => panic!("新路径不是有效的 UTF-8 序列"),
            Some(s) => println!("新路径是 {}", s),
        }
    }

Be sure to check other `Path` methods and the `Metadata` struct.

### 另请参阅：

OsStr 和 Metadata。