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 语义时,以驱动器字母开头的 URI 不能相对于指定的驱动器上的当前驱动器。也就是说,对于 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});