在 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(())
}
我正在为自己编写一个小实用程序,需要能够检查文件是否为符号链接。
始终在 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 thefs::symlink_metadata
function and not thefs::metadata
function. Thefs::metadata
function follows symbolic links, sois_symlink
would always returnfalse
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(())
}