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();