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