метод 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.19.6/dart-io/FileSystemEntity/resolveSymbolicLinksSync.html