метод resolveSymbolicLinks
Разрешает путь к объекту файловой системы относительно текущего рабочего каталога.
Разрешает все символические ссылки в пути, а также все сегменты пути .. и ..
resolveSymbolicLinks использует собственный API файловой системы операционной системы для разрешения пути: в Linux и OS X применяется функция realpath, а в Windows — функция GetFinalPathNameByHandle. Если путь не указывает на существующий объект файловой системы, resolveSymbolicLinks вызывает исключение FileSystemException.
В Windows сегменты .. разрешаются до разрешения символической ссылки, а на других платформах символические ссылки разрешаются в целевой объект до применения следующего за ними ...
Чтобы обеспечить одинаковое поведение на всех платформах, разрешайте сегменты .. перед вызовом resolveSymbolicLinks. Один из способов сделать это — использовать класс Uri:
var path = Uri.parse('.').resolveUri(Uri.file(input)).toFilePath();
if (path == '') path = '.';
var resolved = await File(path).resolveSymbolicLinks();
print(resolved); поскольку Uri.resolve удаляет сегменты ... Это обеспечит поведение Windows.
Реализация
Future<String> resolveSymbolicLinks() {
return _File._dispatchWithNamespace(
_IOService.fileResolveSymbolicLinks, [null, _rawPath]).then((response) {
_checkForErrorResponse(response, "Cannot resolve symbolic links", path);
return response as String;
});
}
© 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/resolveSymbolicLinks.html