Метод resolveSymbolicLinksSync
String resolveSymbolicLinksSync(Разрешает путь к объекту файловой системы относительно текущей рабочей директории, разрешая все символические ссылки в пути и разрешая все .. и . сегменты пути.
resolveSymbolicLinksSync использует собственный API файловой системы операционной системы для разрешения пути, используя функцию realpath на Linux и OS X, и функцию GetFinalPathNameByHandle на Windows. Если путь не указывает на существующий объект файловой системы, resolveSymbolicLinksSync выбрасывает FileSystemException.
В Windows сегменты .. разрешаются до разрешения символической ссылки, а на других платформах символические ссылки разрешаются до их целевого объекта перед применением .., который следует за этим.
Чтобы обеспечить одинаковое поведение на всех платформах, разрешите .. сегменты перед вызовом resolveSymbolicLinksSync. Один из способов сделать это — использовать класс Uri:
var path = Uri.parse('.').resolveUri(new Uri.file(input)).toFilePath();
if (path == '') path = '.';
var resolved = new File(path).resolveSymbolicLinksSync();
print(resolved);
поскольку Uri.resolve удаляет .. сегменты. Это приведет к поведению Windows.
Исходный код
String resolveSymbolicLinksSync() {
var result = _resolveSymbolicLinks(path);
_throwIfError(result, "Cannot resolve symbolic links", path);
return result;
}
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-io/FileSystemEntity/resolveSymbolicLinksSync.html