Spec-Zone.ru › Dart 2

dart:io

Метод resolveSymbolicLinks

Future<String> resolveSymbolicLinks()

Разрешает путь к объекту файловой системы относительно текущей рабочей директории.

Разрешает все символические ссылки в пути и разрешает все .. и . сегменты пути.

resolveSymbolicLinks использует собственный API файловой системы операционной системы для разрешения пути, используя функцию realpath в Linux и OS X, и функцию GetFinalPathNameByHandle в Windows. Если путь не указывает на существующий объект файловой системы, 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) {
    if (_isErrorResponse(response)) {
      throw _exceptionFromResponse(
          response, "Cannot resolve symbolic links", path);
    }
    return response;
  });
}

© 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/resolveSymbolicLinks.html

Spec-Zone.ru

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