is IO::Spec
如果 Raku 解释器在类 Unix 平台上运行,则可以通过变量 $*SPEC
使用此类型的对象。
有关此类及其相关类的信息,另请参见 IO::Spec
。
方法§
方法 abs2rel§
method abs2rel(IO::Path , IO::Path = --> Str)
返回一个字符串,表示 $path
,但相对于 $base
路径。$path
和 $base
都可以是相对路径。$base
默认为 $*CWD
。
方法 basename§
method basename(Str --> Str)
将路径作为字符串,并返回最后一个斜杠后面的可能为空的部分
IO::Spec::Unix.basename("foo/bar/") .raku.say; # OUTPUT: «""»IO::Spec::Unix.basename("foo/bar/.").raku.say; # OUTPUT: «"."»IO::Spec::Unix.basename("foo/bar") .raku.say; # OUTPUT: «"bar"»
方法 canonpath§
method canonpath(Str() , : --> Str)
返回一个字符串,它是 $path
的规范表示形式。如果 :$parent
设置为 true,还将清理对父目录的引用。注意:该例程不访问文件系统,因此不会跟随任何符号链接。
IO::Spec::Unix.canonpath("foo//../bar/../ber").say;# OUTPUT: «foo/../bar/../ber»IO::Spec::Unix.canonpath("foo///./../bar/../ber").say;# OUTPUT: «foo/../bar/../ber»IO::Spec::Unix.canonpath("foo///./../bar/../ber", :parent).say;# OUTPUT: «ber»
方法 catdir§
method catdir (* --> Str)
连接多个路径片段,并返回结果路径的规范表示形式作为字符串。@parts
是 Str
对象,并且允许包含路径分隔符。
IO::Spec::Unix.catdir(<foo/bar ber raku>).say; # OUTPUT: «foo/bar/ber/raku»
方法 catfile§
catdir
的别名。
方法 catpath§
method catpath ($, Str , Str --> Str)
获取两个路径片段并连接它们,必要时添加或删除路径分隔符。第一个参数被忽略(它存在是为了与其他 IO::Spec
类型保持一致的接口,这些类型适用于具有卷的系统)。
IO::Spec::Unix.catpath($, 'some/dir', 'and/more').say;# OUTPUT: «some/dir/and/more»
方法 curdir§
method curdir()
返回一个字符串,表示当前目录
say '.' eq .curdir; # OUTPUT: «True»
方法 curupdir§
method curupdir()
返回一个 Block
,接受一个参数。如果其参数既不是表示当前目录的字符串,也不是表示当前目录上一级的字符串,则此块返回 True
。否则,它返回 False
。此块旨在与 智能匹配 一起使用。
say .curupdir;# OUTPUT: «-> str $dir { #`(Block|65335808) ... }»my = <. foo .. bar>;say .grep: ;# OUTPUT: «(foo bar)»
foo
和 bar
都与当前目录或父目录的表示形式不相等,这就是它们由 grep
返回的原因。
注意:在 Rakudo 2020.06 版本之前,会返回一个 none
Junction
,而不是 Block
。
方法 devnull§
method devnull(--> Str)
返回字符串 "/dev/null"
,表示 "空设备"
.devnull.IO.spurt: "foo bar baz";
方法 dir-sep§
method dir-sep(--> Str)
返回字符串 "/"
,表示规范目录分隔符字符。
IO::Spec::Unix.dir-sep.say; # OUTPUT: «/»
方法 extension§
注意:大多数用户会希望使用更高级别的例程 IO::Path.extension
,而不是此低级别版本。
method extension(Str --> Str)
获取表示基本名称的字符串,并返回最后一个点 ("."
) 之后的字符,如果没有点,则返回空字符串。该例程不会尝试检测路径分隔符,并将返回最后一个点之后的所有内容。
.extension('foo.' ).raku.say; # OUTPUT: «""».extension('foo.txt' ).raku.say; # OUTPUT: «"txt"».extension('foo.tar.gz').raku.say; # OUTPUT: «"gz"».extension('foo' ).raku.say; # OUTPUT: «""».extension('bar.foo/foo').raku.say; # OUTPUT: «"foo/foo"»
方法 is-absolute§
method is-absolute(Str --> Bool)
如果 $path
以斜杠 ("/"
) 开头,则返回 True
,即使其上有组合字符
say IO::Spec::Unix.is-absolute: "/foo"; # OUTPUT: «True»say IO::Spec::Unix.is-absolute: "/\x[308]foo"; # OUTPUT: «True»say IO::Spec::Unix.is-absolute: "bar"; # OUTPUT: «False»
方法 join§
method join ($, Str , Str --> Str)
类似于 catpath
,获取两个路径片段并将其连接起来,必要时添加或删除路径分隔符,但如果 $dir
和 $file
都是字符串 '/'
或 $dir
是字符串 '.'
,则它将仅返回 $file
。第一个参数被忽略(它存在是为了与其他 IO::Spec
类型保持一致的接口,适用于具有卷的系统)。
IO::Spec::Unix.join($, 'foo', 'bar').say; # OUTPUT: «foo/bar»IO::Spec::Unix.join($, '/', '/').say; # OUTPUT: «/»IO::Spec::Unix.join($, '.', 'foo').say; # OUTPUT: «foo»say .join(True,".","/foo"); # OUTPUT: «/foo»
方法 path§
method path(--> Seq)
按冒号 (":"
) 分割 %*ENV<PATH>
的值,用 "."
替换空部分,并返回一个 Seq
,其中包含每个结果部分。如果未设置 %*ENV<PATH>
或其为空字符串,则返回一个空的 Seq
。
<PATH> = 'foo:bar/ber::foo:';IO::Spec::Unix.path.raku.say;# OUTPUT: «("foo", "bar/ber", ".", "foo", ".").Seq»
方法 rel2abs§
method rel2abs(Str() , = --> Str)
返回一个字符串,表示已转换为绝对路径的 $path
,基于 $base
,其默认为 $*CWD
。如果 $base
不是绝对路径,则它将相对于 $*CWD
成为绝对路径,除非 $*CWD
和 $base
相同。
say ; # OUTPUT: «"/home/camelia".IO»say IO::Spec::Unix.rel2abs: 'foo'; # OUTPUT: «/home/camelia/foo»say IO::Spec::Unix.rel2abs: './'; # OUTPUT: «/home/camelia»say IO::Spec::Unix.rel2abs: 'foo/../../'; # OUTPUT: «/home/camelia/foo/../..»say IO::Spec::Unix.rel2abs: '/foo/'; # OUTPUT: «/foo»say IO::Spec::Unix.rel2abs: 'foo', 'bar'; # OUTPUT: «/home/camelia/bar/foo»say IO::Spec::Unix.rel2abs: './', '/bar'; # OUTPUT: «/bar»say IO::Spec::Unix.rel2abs: '/foo/', 'bar'; # OUTPUT: «/foo»say IO::Spec::Unix.rel2abs: 'foo/../../', 'bar';# OUTPUT: «/home/camelia/bar/foo/../..»
方法 rootdir§
method rootdir(--> Str)
返回字符串 '/'
,表示根目录。
方法 split§
method split(IO::Spec::Unix: Cool )
为 $path
创建一个 IO::Path::Parts
,其 volume
属性的值为空字符串。
IO::Spec::Unix.split('C:/foo/bar.txt').raku.say;# OUTPUT: «IO::Path::Parts.new("","C:/foo","bar.txt")»IO::Spec::Unix.split('/foo/').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","foo")»IO::Spec::Unix.split('///').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","/")»IO::Spec::Unix.split('./').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Unix.split('.').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Unix.split('').raku.say;# OUTPUT: «IO::Path::Parts.new("","","")»
注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path
分割为“卷”、“目录名”和“基本名称”,并以 List
的形式返回结果,其中包含三个 Pair
,按此顺序排列。
方法 splitdir§
method splitdir(Cool --> List)
按照斜杠分割给定的 $path
。
IO::Spec::Unix.splitdir('C:\foo/bar.txt').raku.say;# OUTPUT: «("C:\\foo", "bar.txt")»IO::Spec::Unix.splitdir('/foo/').raku.say;# OUTPUT: «("", "foo", "")»IO::Spec::Unix.splitdir('///').raku.say;# OUTPUT: «("", "", "", "")»IO::Spec::Unix.splitdir('./').raku.say;# OUTPUT: «(".", "")»IO::Spec::Unix.splitdir('.').raku.say;# OUTPUT: «(".",)»IO::Spec::Unix.splitdir('').raku.say;# OUTPUT: «("",)»
方法 splitpath§
method splitpath(Cool , : --> List)
将给定的 $path
分割为 3 个字符串的列表:卷、目录名和文件。卷始终为空字符串,返回以与其他 IO::Spec
类型保持 API 兼容性。如果 :$nofile
命名参数设置为 True
,则文件字符串的内容未定义,应忽略;这是一种提高性能的方法,因为在不需要文件时,实现可能会使用更快的代码路径。
IO::Spec::Unix.splitpath('C:\foo/bar.txt').raku.say;# OUTPUT: «("", "C:\\foo/", "bar.txt")»IO::Spec::Unix.splitpath('C:\foo/bar.txt', :nofile).raku.say;# OUTPUT: «("", "C:\\foo/bar.txt", "")»IO::Spec::Unix.splitpath('/foo/').raku.say;# OUTPUT: «("", "/foo/", "")»IO::Spec::Unix.splitpath('/foo/', :nofile).raku.say;# OUTPUT: «("", "/foo/", "")»IO::Spec::Unix.splitpath('///').raku.say;# OUTPUT: «("", "///", "")»IO::Spec::Unix.splitpath('./').raku.say;# OUTPUT: «("", "./", "")»IO::Spec::Unix.splitpath('.').raku.say;# OUTPUT: «("", "", ".")»IO::Spec::Unix.splitpath('').raku.say;# OUTPUT: «("", "", "")»
方法 tmpdir§
method tmpdir(--> IO::Path)
尝试通过检查几个典型目录和环境变量来找到系统的临时目录。如果没有找到合适的目录,则使用当前目录。
方法 updir§
method updir()
返回表示当前目录上一级的字符串
say '..' eq .updir; # OUTPUT: «True»