class IO::Spec::Win32 is IO::Spec::Unix { }

如果 Raku 解释器在类似 Windows 的平台上运行,则可以通过变量 $*SPEC 获得此类型的对象。

有关此类及其相关类的信息,还请参见 IO::Spec

方法§

方法 basename§

method basename(Str:D $path --> Str:D)

将路径作为字符串,并返回最后一个斜杠或反斜杠之后的可能为空的部分

IO::Spec::Win32.basename("foo/bar/".raku.say# OUTPUT: «""␤» 
IO::Spec::Win32.basename("foo/bar\\").raku.say# OUTPUT: «""␤» 
IO::Spec::Win32.basename("foo/bar/.").raku.say# OUTPUT: «"."␤» 
IO::Spec::Win32.basename("foo/bar")  .raku.say# OUTPUT: «"bar"␤»

方法 canonpath§

method canonpath(Str() $path:$parent --> Str:D)

返回一个字符串,该字符串是 $path 的规范表示形式。如果 :$parent 设置为 true,还将清理对父目录的引用。注意:该例程不访问文件系统。

IO::Spec::Win32.canonpath("C:/foo//../bar/../ber").say;
# OUTPUT: «C:\foo\..\bar\..\ber␤» 
 
IO::Spec::Win32.canonpath("C:/foo///./../bar/../ber").say;
# OUTPUT: «C:\foo\..\bar\..\ber␤» 
 
IO::Spec::Win32.canonpath("C:/foo///./../bar/../ber":parent).say;
# OUTPUT: «C:\ber␤»

方法 catdir§

method catdir (*@parts --> Str:D)

连接多个路径片段,并返回结果路径的规范表示形式(字符串)。@partsStr 对象,并且允许包含路径分隔符。

IO::Spec::Win32.catdir(<foo/bar ber raku>).say;
# OUTPUT: «foo\bar\ber\raku␤»

方法 catfile§

catdir 的别名。

方法 catpath§

method catpath (Str:D $volumeStr:D $dirStr:D $file --> Str:D)

从给定的卷、目录链和文件连接路径。三个参数中的任何一个都可以给出空字符串。不尝试规范路径。为此,请使用 canonpath

IO::Spec::Win32.catpath('C:''/some/dir''foo.txt').say;
# OUTPUT: «C:/some/dir\foo.txt␤» 
 
IO::Spec::Win32.catpath('C:''/some/dir''').say;
# OUTPUT: «C:/some/dir␤» 
 
IO::Spec::Win32.catpath('''/some/dir''foo.txt').say;
# OUTPUT: «/some/dir\foo.txt␤» 
 
IO::Spec::Win32.catpath('E:''''foo.txt').say;
# OUTPUT: «E:foo.txt␤»

方法 devnull§

method devnull(--> Str:D)

返回字符串 "nul",表示 "空设备"

$*SPEC.devnull.IO.spurt: "foo bar baz";

方法 dir-sep§

method dir-sep(--> Str:D)

返回字符串 「\」,表示规范目录分隔符字符。

IO::Spec::Win32.dir-sep.say# OUTPUT: «\␤» 

方法 is-absolute§

method is-absolute(Str:D $path --> Bool:D)

如果 $path 以斜杠 ("/") 或反斜杠 ("\") 开头,即使它们上面有组合字符,并且前面可以选择性地加上卷,则返回 True

say IO::Spec::Win32.is-absolute: "/foo";        # OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: "/\x[308]foo"# OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: C:\foo;      # OUTPUT: «True␤» 
say IO::Spec::Win32.is-absolute: "bar";         # OUTPUT: «False␤»

方法 join§

method join (Str:D $volumeStr:D $dirStr:D $file --> Str:D)

类似于 catpath,它接受两个路径片段并将其连接起来,如果需要,添加或删除路径分隔符,但如果 $dir$file 都是字符串 '/' 或如果 $dir 是字符串 '.',它将仅返回 $file。第一个参数被忽略(它存在是为了保持与其他 IO::Spec 类型的一致接口,适用于具有卷的系统)。

IO::Spec::Win32.join('C:''/some/dir''foo.txt').say;
# OUTPUT: «C:/some/dir\and/more␤» 
 
IO::Spec::Win32.join('C:''.''foo.txt').say;
# OUTPUT: «C:foo.txt␤» 
 
IO::Spec::Win32.join('C:'\'/').say;
# OUTPUT: «C:\␤» 
 
IO::Spec::Win32.join('//server/share'\'/').say;
# OUTPUT: «//server/share␤» 
 
IO::Spec::Win32.join('E:''''foo.txt').say;
# OUTPUT: «E:foo.txt␤»

方法 path§

method path(--> Seq:D)

以分号 (";") 分割 %*ENV<PATH>(如果前者未设置,则为 %*ENV<Path>)的值,并返回一个 Seq,其中包含每个结果部分,始终将元素 "." 添加到头部。删除找到的所有双引号 (")。

%*ENV<PATH> = 'foo;"bar"/"ber"';
IO::Spec::Win32.path.raku.say# OUTPUT: «(".", "foo", "bar/ber").Seq␤»

方法 rel2abs§

method rel2abs(Str() $path$base = $*CWD --> Str:D)

返回一个字符串,表示基于 $base 转换为绝对路径的 $path,其默认为 $*CWD。如果 $base 不是绝对路径,它将相对于 $*CWD 变成绝对路径,除非 $*CWD$base 相同。

say $*CWD;                                   # OUTPUT: «"C:\Users\camelia".IO␤» 
 
say IO::Spec::Win32.rel2abs: 'foo';          # OUTPUT: «C:\Users\camelia\foo␤» 
say IO::Spec::Win32.rel2abs: './';           # OUTPUT: «C:\Users\camelia␤» 
say IO::Spec::Win32.rel2abs: 'foo/../../';   # OUTPUT: «C:\Users\camelia\foo\..\..␤» 
say IO::Spec::Win32.rel2abs: '/foo/';        # OUTPUT: «C:\foo␤» 
 
say IO::Spec::Win32.rel2abs: 'foo''bar';   # OUTPUT: «C:\Users\camelia\bar\foo␤» 
say IO::Spec::Win32.rel2abs: './''/bar';   # OUTPUT: «\bar␤» 
say IO::Spec::Win32.rel2abs: '/foo/''bar'# OUTPUT: «C:\foo␤» 
 
say IO::Spec::Win32.rel2abs: 'foo/../../''bar';
# OUTPUT: «C:\Users\camelia\bar\foo\..\..␤» 

方法 rootdir§

method rootdir(--> Str:D)

返回字符串 「\」,表示根目录。

方法 split§

method split(IO::Spec::Win32: Cool:D $path)

$path 创建一个 IO::Path::Parts

IO::Spec::Win32.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("C:","/foo","bar.txt")␤» 
 
IO::Spec::Win32.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Win32.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","\\")␤» 
 
IO::Spec::Win32.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Win32.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path 分割为“卷”、“dirname”和“basename”,并以 List 的形式返回结果,其中包含三个 Pair,按此顺序。

方法 splitdir§

method splitdir(Cool:D $path --> List:D)

在斜杠和反斜杠上分割给定的 $path

IO::Spec::Win32.splitdir('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:", "foo", "bar.txt")␤» 
 
IO::Spec::Win32.splitdir('/foo/').raku.say;
# OUTPUT: «("", "foo", "")␤» 
 
IO::Spec::Win32.splitdir('///').raku.say;
# OUTPUT: «("", "", "", "")␤» 
 
IO::Spec::Win32.splitdir('./').raku.say;
# OUTPUT: «(".", "")␤» 
 
IO::Spec::Win32.splitdir('.').raku.say;
# OUTPUT: «(".",)␤» 
 
IO::Spec::Win32.splitdir('').raku.say;
# OUTPUT: «("",)␤» 

方法 splitpath§

method splitpath(Cool:D $path:$nofile --> List:D)

将给定的 $path 分割为 3 个字符串的列表:卷、dirname 和文件。卷始终为空字符串,返回以与其他 IO::Spec 类型兼容的 API。如果 :$nofile 命名参数设置为 True,则文件字符串的内容未定义,应忽略;这是一种提高性能的方法,因为当不需要文件时,实现可以使用更快的代码路径。

IO::Spec::Win32.splitpath('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:", "\\foo/", "bar.txt")␤» 
 
IO::Spec::Win32.splitpath('C:\foo/bar.txt':nofile).raku.say;
# OUTPUT: «("C:", "\\foo/bar.txt", "")␤» 
 
IO::Spec::Win32.splitpath('/foo/').raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Win32.splitpath('/foo/':nofile).raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Win32.splitpath('///').raku.say;
# OUTPUT: «("", "///", "")␤» 
 
IO::Spec::Win32.splitpath('./').raku.say;
# OUTPUT: «("", "./", "")␤» 
 
IO::Spec::Win32.splitpath('.').raku.say;
# OUTPUT: «("", "", ".")␤» 
 
IO::Spec::Win32.splitpath('').raku.say;
# OUTPUT: «("", "", "")␤» 

方法 tmpdir§

method tmpdir(--> IO::Path:D)

尝试通过检查几个典型目录和环境变量来查找系统的临时目录。如果没有找到合适的目录,则使用当前目录。