Проверить, является ли файл символической ссылкой в ​​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(())
}
Другие вопросы по тегам