Spec-Zone.ru › Dart 2

dart:io

метод resolveSymbolicLinks

Future<String> 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API