Spec-Zone.ru › Dart 1

dart:io

Метод resolveSymbolicLinks

Future<String> resolveSymbolicLinks()

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

resolveSymbolicLinks использует родной API файловой системы операционной системы для разрешения пути, используя функцию realpath в Linux и OS X, и функцию GetFinalPathNameByHandle в Windows. Если путь не указывает на существующий объект файловой системы, resolveSymbolicLinks выбросит FileSystemException.

В Windows сегменты .. разрешаются перед разрешением символической ссылки, а на других платформах символические ссылки разрешаются до их целевого объекта перед применением .., который следует за этим.

Для обеспечения одинакового поведения на всех платформах разрешите .. сегменты перед вызовом resolveSymbolicLinks. Один из способов сделать это – использовать класс Uri.

var path = Uri.parse('.').resolveUri(new Uri.file(input)).toFilePath();
if (path == '') path = '.';
new File(path).resolveSymbolicLinks().then((resolved) {
  print(resolved);
});

поскольку Uri.resolve удаляет .. сегменты. Это приведет к поведению Windows.

Исходный код

Future<String> resolveSymbolicLinks() {
  return _IOService
      ._dispatch(_FILE_RESOLVE_SYMBOLIC_LINKS, [path]).then((response) {
    if (_isErrorResponse(response)) {
      throw _exceptionFromResponse(
          response, "Cannot resolve symbolic links", path);
    }
    return response;
  });
}

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-io/FileSystemEntity/resolveSymbolicLinks.html

Spec-Zone.ru

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