Тип DirEntry
Тип DirEntry представляет собой запись
об элементе директории, возвращаемую итератором
метода read_dir. Каждая такая запись
содержит информацию о файле или поддиректории:
путь, имя, тип файла и метаданные. Тип
DirEntry не создаётся напрямую, а
получается в результате обхода содержимого
директории.
Синтаксис
use std::fs::DirEntry;
// Получение через итератор read_dir
for entry in std::fs::read_dir(path)?
{
let entry: DirEntry = entry?;
}
Методы
Тип DirEntry предоставляет следующие методы:
entry.path() // возвращает PathBuf
entry.file_name() // возвращает OsString
entry.file_type() // возвращает io::Result<FileType>
entry.metadata() // возвращает io::Result<Metadata>
Пример
Давайте прочитаем содержимое текущей директории и выведем путь каждой записи:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
println!("{:?}", entry.path());
}
}
Результат выполнения кода:
"./src"
"./Cargo.toml"
"./target"
Пример
Давайте выведем имя и тип каждой записи в текущей директории:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
let name = entry.file_name();
let file_type = entry.file_type().unwrap();
if file_type.is_dir()
{
println!("{:?} - директория", name);
}
else
{
println!("{:?} - файл", name);
}
}
}
Результат выполнения кода:
"src" - директория
"Cargo.toml" - файл
"target" - директория
Пример
Давайте получим метаданные каждой записи в текущей директории и выведем их размер:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
let metadata = entry.metadata().unwrap();
let name = entry.file_name();
println!("{:?}: {} байт", name, metadata.len());
}
}
Результат выполнения кода:
"src": 4096 байт
"Cargo.toml": 245 байт
"target": 4096 байт