julia如何知道要使用的路径分隔符和根目录?

时间:2018-01-22 03:23:25

标签: julia

joinpath等函数在连接两个路径时​​使用相应的依赖于操作系统的分隔符(例如Linux上为/,Windows上为\\等)。这些函数如何知道要使用哪个分隔符?

同样,Linux上的根目录是/,但在Windows上可能是C:\\。有没有办法在Julia中检索依赖于操作系统的根目录?

注意,我已经查看了joinpath source on github,它似乎使用了未记录的函数pathsep(a,b)和全局变量path_separator_re,但是我无法看到其中任何一种是如何工作的。

1 个答案:

答案 0 :(得分:1)

它使用Sys.isunixSys.iswindows函数来有条件地定义正确的path_separator_re变量等。

if Sys.isunix()
    # ...
    const path_separator_re = r"/+"
    # ...

    splitdrive(path::String) = ("",path)
elseif Sys.iswindows()
    # ...
    const path_separator_re = r"[/\\]+"
    # ...

    function splitdrive(path::String)
        m = match(r"^([^\\]+:|\\\\[^\\]+\\[^\\]+|\\\\\?\\UNC\\[^\\]+\\[^\\]+|\\\\\?\\[^\\]+:|)(.*)$", path)
        String(m.captures[1]), String(m.captures[2])
    end
else
    error("path primitives for this OS need to be defined")
end

对于根目录,请查看homedir函数,该函数使用libuv来确定它。

  

帮助&GT?;主目录   搜索:homedir

     

homedir() -> AbstractString     返回当前用户的主目录。

     

|注意     |     | homedir通过libuv' s uv_os_homedir确定主目录。有关详细信息(例如,如何指定主页     |目录通过环境变量),参见uv_os_homedir文档。