toFilePath抽象方法

String toFilePath(
  1. {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});