Класс Path
Класс Path представляет собой срез пути к файлу или директории в файловой системе. Он не владеет данными, а является ссылкой на путь, хранящийся в другом месте, например в PathBuf или в строковом литерале. Класс Path позволяет разбирать путь на компоненты, извлекать имя файла, расширение, родительскую директорию, проверять абсолютность пути и выполнять множество других операций. Параметром методов обычно выступает другой путь или строка, с которой нужно сравнить или объединить текущий путь.
Синтаксис
use std::path::Path;
let path = Path::new("путь");
Пример
Давайте создадим путь из строки "/home/user/file.txt" и выведем его на экран:
use std::path::Path;
fn main()
{
let path = Path::new("/home/user/file.txt");
println!("{}", path.display());
}
Результат выполнения кода:
"/home/user/file.txt"
Пример
Давайте извлечём имя файла и расширение из пути "/home/user/file.txt":
use std::path::Path;
fn main()
{
let path = Path::new("/home/user/file.txt");
let file_name = path.file_name().unwrap();
let extension = path.extension().unwrap();
println!("{}", file_name.to_string_lossy());
println!("{}", extension.to_string_lossy());
}
Результат выполнения кода:
"file.txt"
"txt"
Пример
Давайте получим родительскую директорию для пути "/home/user/file.txt":
use std::path::Path;
fn main()
{
let path = Path::new("/home/user/file.txt");
let parent = path.parent().unwrap();
println!("{}", parent.display());
}
Результат выполнения кода:
"/home/user"
Пример
Давайте объединим два пути "/home/user" и "file.txt" с помощью метода join:
use std::path::Path;
fn main()
{
let path = Path::new("/home/user");
let joined = path.join("file.txt");
println!("{}", joined.display());
}
Результат выполнения кода:
"/home/user/file.txt"
Пример
Давайте проверим, является ли путь "/home/user/file.txt" абсолютным:
use std::path::Path;
fn main()
{
let path = Path::new("/home/user/file.txt");
let res = path.is_absolute();
println!("{}", res);
}
Результат выполнения кода:
true
Пример
Давайте разберём путь "/home/user/file.txt" на компоненты и выведем каждый из них:
use std::path::Path;
fn main()
{
let path = Path::new("/home/user/file.txt");
for component in path.components()
{
println!("{:?}", component);
}
}
Результат выполнения кода:
RootDir
Normal("home")
Normal("user")
Normal("file.txt")