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 上的行为。

在 Windows 上,尝试解决一个不符合解析的文件系统对象类型的符号链接将导致 Future 以一个 PathAccessException 错误完成。

实现

Future<String> resolveSymbolicLinks();