resolveSymbolicLinksSync 抽象方法

String resolveSymbolicLinksSync()
override

解析文件系统对象相对于当前工作目录的路径。

解析路径上的所有符号链接,并解析所有 ... 路径段。

resolveSymbolicLinksSync 使用操作系统的本地文件系统 API 解析路径,在 Linux 和 OS X 上使用 realpath 函数,在 Windows 上使用 GetFinalPathNameByHandle 函数。如果路径不指向现有的文件系统对象,resolveSymbolicLinksSync 投掷一个 FileSystemException

在 Windows 上,在解析符号链接之前先解析 .. 路径段,在其他平台上的行为则相反。

为了确保在所有平台上具有相同的行为,请在调用 resolveSymbolicLinksSync 之前解析 .. 路径段。实现此目的的一种方法是使用 Uri

var path = Uri.parse('.').resolveUri(Uri.file(input)).toFilePath();
if (path == '') path = '.';
var resolved = File(path).resolveSymbolicLinksSync();
print(resolved);

因为 Uri.resolve 会删除 .. 路径段。这将导致 Windows 的行为。

在 Windows 上,符号链接要么是文件链接,要么是目录链接。尝试解析此类符号链接需要链接类型与指向的文件系统对象类型匹配,否则会抛出一个 PathAccessException

实现

String resolveSymbolicLinksSync();