is IO::Spec::Unix
如果 Raku 解释器在类似 Windows 的平台上运行,则可以通过变量 $*SPEC
获得此类型的对象。
有关此类及其相关类的信息,还请参见 IO::Spec
。
方法§
方法 basename§
method basename(Str --> Str)
将路径作为字符串,并返回最后一个斜杠或反斜杠之后的可能为空的部分
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() , : --> Str)
返回一个字符串,该字符串是 $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 (* --> Str)
连接多个路径片段,并返回结果路径的规范表示形式(字符串)。@parts
是 Str
对象,并且允许包含路径分隔符。
IO::Spec::Win32.catdir(<foo/bar ber raku>).say;# OUTPUT: «foo\bar\ber\raku»
方法 catfile§
catdir
的别名。
方法 catpath§
method catpath (Str , Str , Str --> Str)
从给定的卷、目录链和文件连接路径。三个参数中的任何一个都可以给出空字符串。不尝试规范路径。为此,请使用 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)
返回字符串 "nul"
,表示 "空设备"
.devnull.IO.spurt: "foo bar baz";
方法 dir-sep§
method dir-sep(--> Str)
返回字符串 「\」
,表示规范目录分隔符字符。
IO::Spec::Win32.dir-sep.say; # OUTPUT: «\»
方法 is-absolute§
method is-absolute(Str --> Bool)
如果 $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 , Str , Str --> Str)
类似于 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)
以分号 (";"
) 分割 %*ENV<PATH>
(如果前者未设置,则为 %*ENV<Path>
)的值,并返回一个 Seq
,其中包含每个结果部分,始终将元素 "."
添加到头部。删除找到的所有双引号 ("
)。
<PATH> = 'foo;"bar"/"ber"';IO::Spec::Win32.path.raku.say; # OUTPUT: «(".", "foo", "bar/ber").Seq»
方法 rel2abs§
method rel2abs(Str() , = --> Str)
返回一个字符串,表示基于 $base
转换为绝对路径的 $path
,其默认为 $*CWD
。如果 $base
不是绝对路径,它将相对于 $*CWD
变成绝对路径,除非 $*CWD
和 $base
相同。
say ; # 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)
返回字符串 「\」
,表示根目录。
方法 split§
method split(IO::Spec::Win32: Cool )
为 $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 --> List)
在斜杠和反斜杠上分割给定的 $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 , : --> List)
将给定的 $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)
尝试通过检查几个典型目录和环境变量来查找系统的临时目录。如果没有找到合适的目录,则使用当前目录。