Path

Cấu trúc Path đại diện cho đường dẫn tới tệp tin trên hệ thống tệp (filesystem). Có hai loại Path: posix::Path dành cho các hệ thống UNIX, và windows::Path dành cho hệ thống Windows. Prelude sẽ tự động thiết lập các phiên bản Path phù hợp với nền tảng cụ thể.

Trong Rust, "Prelude" là một tập hợp các thư viện được tự động đưa vào phạm vi của một chương trình Rust mà không cần khai báo thêm. Tập hợp này bao gồm các thư viện cốt lõi của Rust cũng như một số thư viện phổ biến khác.

Một đối tượng Path có thể được tạo ra từ một OsStr, và cung cấp nhiều phương thức để lấy thông tin từ tệp tin/thư mục mà đường dẫn trỏ tới.
Path là một đối tượng không thể thay đổi (immutable). Phiên bản Path được sở hữu bởi (owned) là PathBuf. Mối quan hệ giữa PathPathBuf tương tự như giữa strString: một PathBuf có thể được thay đổi trực tiếp (in-place), và có thể được giải tham chiếu (dereferenced) thành một Path.
Lưu ý rằng một Path không thể được biểu diễn bên dưới dạng một chuỗi UTF-8, mà sẽ được lưu trữ dưới dạng một OsString. Do đó, không nên chuyển đổi một Path thành một &str vì tiến trình này rất dễ xảy ra lỗi (trả về một Option). Tuy nhiên, một Path có thể được tự do chuyển đổi thành một OsString hoặc &OsStr bằng cách sử dụng into_os_stringas_os_str."

use std::path::Path;

fn main() {
    // Tạo một `Path` từ một `&'static str`
    let path = Path::new(".");

    // Phương thức `display` sẽ trả về một cấu trúc `Display`able
    let _display = path.display();

    // `join` sẽ hợp nhất các phần của đường dẫn lại và thiết lập các dấu phân cách tùy thuộc vào hệ điều hành
    // sau đó sẽ trả về một `PathBuf`
    let mut new_path = path.join("a").join("b");

    // `push` sẽ mở rộng `PathBuf` với một `&Path`
    new_path.push("c");
    new_path.push("myfile.tar.gz");

    // `set_file_name` sẽ cập nhật tên của tệp tại `PathBuf`
    new_path.set_file_name("package.tgz");

    // Chuyển `PathBuf` sang một string slice (&str)
    match new_path.to_str() {
        None => panic!("new path is not a valid UTF-8 sequence"),
        Some(s) => println!("new path is {}", s),
    }
}

Tùy vào trường hợp cụ thể, hãy chắc chắn rằng đã kiểm tra các phương thức khác của Path (posix::Path hoặc windows::Path - thuộc vào hệ điều hành) và cấu trúc Metadata - một đối tượng cung cấp thông tin khác ngoài nội dung của file hoặc thư mục.

Xem thêm:

OsStrMetadata.