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