Uri.file 构造函数

Uri.file(
  1. String path, {
  2. bool? windows,
})

从绝对或相对文件路径创建一个新的文件URI。

文件路径通过 path 传入。

此路径使用Windows或非Windows语义进行解释。

在使用非Windows语义的情况下,正斜杠 (/) 用于在输入的 path 中分隔路径段。

在使用Windows语义的情况下,反斜杠 (\) 和正斜杠 (/) 用于在输入的 path 中分隔路径段,除非路径以 \\?\ 开头,在这种情况下,只有反斜杠 (\) 用于分隔 path 中的路径段。

如果路径以路径分隔符开头,则创建一个绝对URI(带有 file 方案和一个空的授权)。否则,创建一个不带方案或授权的相对URI引用。此规则的例外之一是,当使用Windows语义并且路径以驱动器字母和冒号 (":") 以及路径分隔符开头时,将创建一个绝对URI。

是否使用Windows或非Windows语义的默认值由Dart运行的平台决定。在独立VM中运行时,这是由VM根据操作系统检测到的。在浏览器中运行时,始终使用非Windows语义。

要覆盖自动检测要使用的语义,请为 windows 传递一个值。传递 true 将使用Windows语义,而传递 false 将使用非Windows语义。

使用非Windows语义的示例

// xxx/yyy
Uri.file('xxx/yyy', windows: false);

// xxx/yyy/
Uri.file('xxx/yyy/', windows: false);

// file:///xxx/yyy
Uri.file('/xxx/yyy', windows: false);

// file:///xxx/yyy/
Uri.file('/xxx/yyy/', windows: false);

// C%3A
Uri.file('C:', windows: false);

使用Windows语义的示例

// xxx/yyy
Uri.file(r'xxx\yyy', windows: true);

// xxx/yyy/
Uri.file(r'xxx\yyy\', windows: true);

file:///xxx/yyy
Uri.file(r'\xxx\yyy', windows: true);

file:///xxx/yyy/
Uri.file(r'\xxx\yyy/', windows: true);

// file:///C:/xxx/yyy
Uri.file(r'C:\xxx\yyy', windows: true);

// This throws an error. A path with a drive letter, but no following
// path, is not allowed.
Uri.file(r'C:', windows: true);

// This throws an error. A path with a drive letter is not absolute.
Uri.file(r'C:xxx\yyy', windows: true);

// file://server/share/file
Uri.file(r'\\server\share\file', windows: true);

如果传入的路径不是有效的文件路径,则会抛出错误。

实现

factory Uri.file(String path, {bool? windows}) = _Uri.file;