Проверить, является ли файл символической ссылкой в Rust 2018 для Windows
Я пишу для себя небольшую утилиту, которая должна иметь возможность проверять, является ли файл символической ссылкой или нет.
С использованиемFileType::is_symlink
в Windows всегда возвращается
false
(касается как симлинков на каталоги, так и обычных файлов).
Используя обычную версию Rust 2018, есть ли способ проверить, является ли файл символической ссылкой в Windows?
В поисках наткнулся:FileTypeExt
- однако это требует, чтобы вы использовали нестабильный Rust, насколько я могу судить.
1 ответ
С использованиемFile::metadata()
или жечтобы получить тип файла, всегда будет возвращать false дляпотому что в этот момент ссылка уже была пройдена. Документы , что:
лежащий в основе
Metadata
структура должна быть получена с помощьюfs::symlink_metadata
функция, а нефункция.fs::metadata()
fs::metadata
функция следует символическим ссылкам, поэтомуFileType::is_symlink()
is_symlink
отмечаютвсегда будет возвращатьсяfalse
для целевого файла.
use std::fs;
fn main() -> std::io::Result<()> {
let metadata = fs::symlink_metadata("foo.txt")?;
let file_type = metadata.file_type();
let _ = file_type.is_symlink();
Ok(())
}