Функция read_link
Функция read_link из модуля std::fs
читает символическую ссылку и возвращает путь,
на который эта ссылка указывает. Параметром
функция принимает путь к символической ссылке,
которую нужно прочитать. Возвращается результат
типа io::Result<PathBuf>: при успехе -
Ok с путём назначения, при ошибке -
Err.
Важно понимать, что функция возвращает именно тот путь, который записан внутри символической ссылки. Этот путь может быть как абсолютным, так и относительным, и не обязательно должен существовать в файловой системе.
Синтаксис
std::fs::read_link(path)
Пример
Давайте создадим символическую ссылку и прочитаем путь, на который она указывает:
use std::fs;
use std::path::Path;
fn main()
{
fs::write("target.txt", "hello").unwrap();
#[cfg(unix)]
std::os::unix::fs::symlink("target.txt", "link.txt").unwrap();
#[cfg(windows)]
std::os::windows::fs::symlink_file("target.txt", "link.txt").unwrap();
let res = fs::read_link("link.txt").unwrap();
println!("{}", res.display());
}
Результат выполнения кода:
target.txt
Пример
Давайте прочитаем символическую ссылку, которая указывает на несуществующий файл:
use std::fs;
fn main()
{
#[cfg(unix)]
std::os::unix::fs::symlink("missing.txt", "dangling.txt").unwrap();
#[cfg(windows)]
std::os::windows::fs::symlink_file("missing.txt", "dangling.txt").unwrap();
let res = fs::read_link("dangling.txt").unwrap();
println!("{}", res.display());
}
Результат выполнения кода:
missing.txt
Пример
Давайте обработаем ошибку, которая возникает, если переданный путь не является символической ссылкой:
use std::fs;
fn main()
{
fs::write("abcde.txt", "12345").unwrap();
match fs::read_link("abcde.txt")
{
Ok(path) => println!("{}", path.display()),
Err(e) => println!("Error: {}", e),
}
}
Результат выполнения кода:
Error: invalid argument (os error 22)
Смотрите также
-
функция
symlink,
которая создаёт символическую ссылку на файл -
функция
hard_link,
которая создаёт жёсткую ссылку на файл -
функция
symlink_metadata,
которая возвращает метаданные символической ссылки -
функция
canonicalize,
которая возвращает канонический абсолютный путь