Uri.file 构造函数
从绝对或相对文件路径创建一个新的文件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;