Метод metadata класса DirEntry
Метод metadata класса DirEntry возвращает
объект Metadata, содержащий информацию о файле
или директории, на которую указывает данная запись
директории. Метод не принимает параметров и возвращает
значение типа io::Result<Metadata>, так как
получение метаданных может завершиться ошибкой
(например, если файл был удалён или доступ запрещён).
Класс DirEntry создаётся при чтении содержимого
директории с помощью метода read_dir. Каждая
запись соответствует одному элементу внутри директории,
а метод metadata позволяет получить подробную
информацию об этом элементе: размер, тип, время
создания, изменения и последнего доступа, а также
права доступа.
Синтаксис
dir_entry.metadata()
Пример
Давайте прочитаем содержимое текущей директории и выведем размер каждого элемента:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
let meta = entry.metadata().unwrap();
println!("{}: {} bytes", entry.file_name().to_string_lossy(), meta.len());
}
}
Результат выполнения кода (пример):
"Cargo.toml: 145 bytes"
"src: 4096 bytes"
"target: 4096 bytes"
Пример
Давайте проверим, является ли каждый элемент директории файлом или папкой, используя метаданные:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
let meta = entry.metadata().unwrap();
let kind = if meta.is_file()
{
"file"
}
else if meta.is_dir()
{
"dir"
}
else
{
"other"
};
println!("{}: {}", entry.file_name().to_string_lossy(), kind);
}
}
Результат выполнения кода (пример):
"Cargo.toml: file"
"src: dir"
"target: dir"
Пример
Давайте получим время последнего изменения для каждого элемента директории:
use std::fs;
fn main()
{
let entries = fs::read_dir(".").unwrap();
for entry in entries
{
let entry = entry.unwrap();
let meta = entry.metadata().unwrap();
match meta.modified()
{
Ok(time) =>
{
println!("{}: {:?}", entry.file_name().to_string_lossy(), time);
}
Err(e) =>
{
println!("{}: error - {}", entry.file_name().to_string_lossy(), e);
}
}
}
}
Результат выполнения кода (пример):
"Cargo.toml: SystemTime { tv_sec: 1700000000, tv_nsec: 0 }"
"src: SystemTime { tv_sec: 1700000001, tv_nsec: 0 }"
"target: SystemTime { tv_sec: 1700000002, tv_nsec: 0 }"