在 Windows 上检查文件是否是 Rust 2018 中的符号链接

Check if a file is a symlink in Rust 2018 on Windows

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

始终在 Windows 上使用 FileType::is_symlink returns false(用于指向目录和常规文件的符号链接)。

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

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

使用File::metadata() or fs::metadata() to get the file type will always return false for FileType::is_symlink() because the link has already been followed at that point. The docs注意:

The underlying Metadata struct needs to be retrieved with the fs::symlink_metadata function and not the fs::metadata function. The fs::metadata function follows symbolic links, so is_symlink would always return false for the target file.

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(())
}