1

我正在为自己编写一个小实用程序,它需要能够检查文件是否是符号链接。

FileType::is_symlink在 Windows 上使用总是返回false(适用于目录的符号链接和常规文件)。

使用常规的 Rust 2018 版本,有什么方法可以检查文件是否是 Windows 上的符号链接?

在我的搜索中,我遇到了:FileTypeExt- 但是据我所知,这需要你使用不稳定的 Rust。

4

1 回答 1

4

使用File::metadata()orfs::metadata()来获取文件类型将始终返回 false for,FileType::is_symlink()因为此时该链接已被关注。文档指出:

底层Metadata结构需要用fs::symlink_metadata函数而不是fs::metadata函数来检索。该fs::metadata函数遵循符号链接,因此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(())
}
于 2021-01-16T19:35:17.507 回答