Метод path
Метод path возвращает значение типа PathBuf -
полный путь к файлу или директории, которую представляет
данная запись DirEntry. Путь строится путём соединения
пути каталога, для которого был вызван метод read_dir,
с именем файла, полученным из записи. Метод не принимает
параметров и возвращает новый объект PathBuf, который
можно использовать для дальнейшей работы с файловой системой.
Запись DirEntry обычно получается в результате обхода
содержимого каталога с помощью метода read_dir.
Метод path удобен тем, что сразу возвращает готовый
путь, не требуя ручного соединения частей.
Синтаксис
dir_entry.path()
Пример
Давайте создадим временный каталог с одним файлом и
получим полный путь к этому файлу через метод path:
use std::fs;
use std::io;
fn main() -> io::Result<()>
{
let dir = "test_dir";
fs::create_dir_all(dir)?;
fs::write(format!("{}/file.txt", dir), "hello")?;
for entry in fs::read_dir(dir)?
{
let entry = entry?;
let res = entry.path();
println!("{:?}", res);
}
fs::remove_dir_all(dir)?;
Ok(())
}
Результат выполнения кода:
"test_dir/file.txt"
Пример
Давайте получим имя файла из записи и построим путь
вручную, чтобы сравнить его с результатом метода
path:
use std::fs;
use std::io;
use std::path::PathBuf;
fn main() -> io::Result<()>
{
let dir = "test_dir";
fs::create_dir_all(dir)?;
fs::write(format!("{}/file.txt", dir), "hello")?;
for entry in fs::read_dir(dir)?
{
let entry = entry?;
let name = entry.file_name();
let manual: PathBuf = PathBuf::from(dir).join(&name);
let res = entry.path();
println!("manual: {:?}", manual);
println!("path: {:?}", res);
}
fs::remove_dir_all(dir)?;
Ok(())
}
Результат выполнения кода:
manual: "test_dir/file.txt"
path: "test_dir/file.txt"