toFilePath抽象方法
- {bool? windows}
从文件URI创建文件路径。
返回的路径具有Windows或非Windows语义。
对于非Windows语义,使用斜杠理科分隔路径段。
对于Windows语义,使用反斜杠分隔路径段。
如果URI是绝对路径,路径将以路径分隔符开始,除非使用Windows语义且第一个路径段是驱动器字母。当使用Windows语义时,URI中的主机组件被视为文件服务器,并返回UNC路径。
默认是否使用Windows或非Windows语义由Dart运行的平台确定。在独立VM中运行时,这由VM根据操作系统检测。在浏览器中运行时,始终使用非Windows语义。
要通过传递值覆盖自动检测的语义,请传递windows
的值。传递true
将使用Windows语义,而传递false
将使用非Windows语义。
如果URI以斜杠结尾(即最后一个路径组件为空),则返回的文件路径也将以斜杠结尾。
在Windows语义中,以驱动器字母开始的URIs不能相对于指定的驱动器的当前驱动器。也就是说,对于URI file:///c:abc
,调用toFilePath
将会引发异常,因为在Windows中路径段不能包含冒号。
使用非Windows语义的示例(结果为调用toFilePath的注释所示)
Uri.parse("xxx/yyy"); // xxx/yyy
Uri.parse("xxx/yyy/"); // xxx/yyy/
Uri.parse("file:///xxx/yyy"); // /xxx/yyy
Uri.parse("file:///xxx/yyy/"); // /xxx/yyy/
Uri.parse("file:///C:"); // /C:
Uri.parse("file:///C:a"); // /C:a
使用Windows语义的示例(结果URI在注释中)
Uri.parse("xxx/yyy"); // xxx\yyy
Uri.parse("xxx/yyy/"); // xxx\yyy\
Uri.parse("file:///xxx/yyy"); // \xxx\yyy
Uri.parse("file:///xxx/yyy/"); // \xxx\yyy\
Uri.parse("file:///C:/xxx/yyy"); // C:\xxx\yyy
Uri.parse("file:C:xxx/yyy"); // Throws as a path segment
// cannot contain colon on Windows.
Uri.parse("file://server/share/file"); // \\server\share\file
如果URI不是文件URI,调用此函数将引发UnsupportedError。
如果URI无法转换为文件路径,调用此函数将引发UnsupportedError。
实现
// TODO(lrn): Deprecate and move functionality to File class or similar.
// The core libraries should not worry about the platform.
String toFilePath({bool? windows});