文件系统

Base.Filesystem.pwd函数
pwd() -> String

获取当前工作目录。

另请参阅:cdtempdir

示例

julia> pwd()
"/home/JuliaUser"

julia> cd("/home/JuliaUser/Projects/julia")

julia> pwd()
"/home/JuliaUser/Projects/julia"
源代码
Base.Filesystem.cd方法
cd(dir::AbstractString=homedir())

设置当前工作目录。

另请参阅:pwdmkdirmkpathmktempdir

示例

julia> cd("/home/JuliaUser/Projects/julia")

julia> pwd()
"/home/JuliaUser/Projects/julia"

julia> cd()

julia> pwd()
"/home/JuliaUser"
源代码
Base.Filesystem.cd方法
cd(f::Function, dir::AbstractString=homedir())

临时将当前工作目录更改为 dir,应用函数 f,最后返回到原始目录。

示例

julia> pwd()
"/home/JuliaUser"

julia> cd(readdir, "/home/JuliaUser/Projects/julia")
34-element Array{String,1}:
 ".circleci"
 ".freebsdci.sh"
 ".git"
 ".gitattributes"
 ".github"
 ⋮
 "test"
 "ui"
 "usr"
 "usr-staging"

julia> pwd()
"/home/JuliaUser"
源代码
Base.Filesystem.readdir函数
readdir(dir::AbstractString=pwd();
    join::Bool = false,
    sort::Bool = true,
) -> Vector{String}

返回目录 dir 中的文件名,如果未给出则返回当前工作目录中的文件名。当 join 为假时,readdir 只返回目录中的文件名;当 join 为真时,它为每个 name 返回 joinpath(dir, name),以便返回的字符串为完整路径。如果要获取绝对路径,请使用绝对目录路径和 join 设置为 true 调用 readdir

默认情况下,readdir 会对返回的文件名列表进行排序。如果要跳过排序文件名并按文件系统列出的顺序获取文件名,可以使用 readdir(dir, sort=false) 选择退出排序。

另请参阅:walkdir

Julia 1.4

joinsort 关键字参数需要 Julia 1.4 或更高版本。

示例

julia> cd("/home/JuliaUser/dev/julia")

julia> readdir()
30-element Array{String,1}:
 ".appveyor.yml"
 ".git"
 ".gitattributes"
 ⋮
 "ui"
 "usr"
 "usr-staging"

julia> readdir(join=true)
30-element Array{String,1}:
 "/home/JuliaUser/dev/julia/.appveyor.yml"
 "/home/JuliaUser/dev/julia/.git"
 "/home/JuliaUser/dev/julia/.gitattributes"
 ⋮
 "/home/JuliaUser/dev/julia/ui"
 "/home/JuliaUser/dev/julia/usr"
 "/home/JuliaUser/dev/julia/usr-staging"

julia> readdir("base")
145-element Array{String,1}:
 ".gitignore"
 "Base.jl"
 "Enums.jl"
 ⋮
 "version_git.sh"
 "views.jl"
 "weakkeydict.jl"

julia> readdir("base", join=true)
145-element Array{String,1}:
 "base/.gitignore"
 "base/Base.jl"
 "base/Enums.jl"
 ⋮
 "base/version_git.sh"
 "base/views.jl"
 "base/weakkeydict.jl"

julia> readdir(abspath("base"), join=true)
145-element Array{String,1}:
 "/home/JuliaUser/dev/julia/base/.gitignore"
 "/home/JuliaUser/dev/julia/base/Base.jl"
 "/home/JuliaUser/dev/julia/base/Enums.jl"
 ⋮
 "/home/JuliaUser/dev/julia/base/version_git.sh"
 "/home/JuliaUser/dev/julia/base/views.jl"
 "/home/JuliaUser/dev/julia/base/weakkeydict.jl"
源代码
Base.Filesystem.walkdir函数
walkdir(dir; topdown=true, follow_symlinks=false, onerror=throw)

返回一个迭代器,该迭代器遍历目录的目录树。迭代器返回一个包含 (rootpath, dirs, files) 的元组。目录树可以自顶向下或自底向上遍历。如果 walkdirstat 遇到 IOError,它将默认重新抛出错误。可以通过 onerror 关键字参数提供自定义错误处理函数。onerror 使用 IOError 作为参数被调用。

另请参阅:readdir

示例

for (root, dirs, files) in walkdir(".")
    println("Directories in $root")
    for dir in dirs
        println(joinpath(root, dir)) # path to directories
    end
    println("Files in $root")
    for file in files
        println(joinpath(root, file)) # path to files
    end
end
julia> mkpath("my/test/dir");

julia> itr = walkdir("my");

julia> (root, dirs, files) = first(itr)
("my", ["test"], String[])

julia> (root, dirs, files) = first(itr)
("my/test", ["dir"], String[])

julia> (root, dirs, files) = first(itr)
("my/test/dir", String[], String[])
源代码
Base.Filesystem.mkdir函数
mkdir(path::AbstractString; mode::Unsigned = 0o777)

使用名称 path 和权限 mode 创建一个新目录。mode 默认为 0o777,并由当前文件创建掩码修改。此函数最多只能创建一个目录。如果目录已存在,或者某些中间目录不存在,此函数将抛出错误。有关创建所有必需中间目录的函数,请参阅 mkpath。返回 path

示例

julia> mkdir("testingdir")
"testingdir"

julia> cd("testingdir")

julia> pwd()
"/home/JuliaUser/testingdir"
源代码
Base.Filesystem.mkpath函数
mkpath(path::AbstractString; mode::Unsigned = 0o777)

根据需要创建 path 中的所有中间目录。目录使用权限 mode 创建,默认为 0o777,并由当前文件创建掩码修改。与 mkdir 不同,如果 path(或其部分)已存在,mkpath 不会出错。但是,如果 path(或其部分)指向现有文件,则会抛出错误。返回 path

如果 path 包含文件名,您可能需要使用 mkpath(dirname(path)) 以避免使用文件名创建目录。

示例

julia> cd(mktempdir())

julia> mkpath("my/test/dir") # creates three directories
"my/test/dir"

julia> readdir()
1-element Array{String,1}:
 "my"

julia> cd("my")

julia> readdir()
1-element Array{String,1}:
 "test"

julia> readdir("test")
1-element Array{String,1}:
 "dir"

julia> mkpath("intermediate_dir/actually_a_directory.txt") # creates two directories
"intermediate_dir/actually_a_directory.txt"

julia> isdir("intermediate_dir/actually_a_directory.txt")
true
源代码
Base.Filesystem.hardlink函数
hardlink(src::AbstractString, dst::AbstractString)

为现有源文件 src 创建一个名为 dst 的硬链接。目标 dst 必须不存在。

另请参阅:symlink

Julia 1.8

此方法在 Julia 1.8 中添加。

源代码
Base.Filesystem.symlink函数
symlink(target::AbstractString, link::AbstractString; dir_target = false)

target 创建一个名为 link 的符号链接。

在 Windows 上,必须明确声明符号链接是指目录还是文件。如果 target 已存在,则默认情况下会自动检测 link 的类型,但是如果 target 不存在,则此函数默认为创建文件符号链接,除非 dir_target 设置为 true。请注意,如果用户设置了 dir_targettarget 存在且为文件,则仍将创建目录符号链接,但取消引用符号链接将失败,就像用户创建文件符号链接(通过在创建目录之前将 dir_target 设置为 false 调用 symlink())并尝试取消引用它到目录一样。

此外,在 Windows 上创建链接有两种方法:符号链接和联接点。联接点效率略高,但不支持相对路径,因此如果请求相对目录符号链接(如 isabspath(target) 返回 false 所示),则将使用符号链接,否则将使用联接点。在 Windows 上创建符号链接的最佳实践是在创建它们引用的文件/目录后才创建它们。

另请参阅:hardlink

注意

此函数在不支持软符号链接的操作系统(如 Windows XP)下会引发错误。

Julia 1.6

dir_target 关键字参数在 Julia 1.6 中添加。在此之前,指向 Windows 上不存在路径的符号链接始终为文件符号链接,并且不支持指向目录的相对符号链接。

源代码
Base.Filesystem.chmod函数
chmod(path::AbstractString, mode::Integer; recursive::Bool=false)

path 的权限模式更改为 mode。目前仅支持整数 mode(例如 0o777)。如果 recursive=true 且路径为目录,则该目录中的所有权限将被递归更改。返回 path

注意

在 Julia 1.6 之前,此操作无法正确操作 Windows 上的文件系统 ACL,因此它只会设置文件上的只读位。现在它能够操作 ACL。

源代码
Base.Filesystem.chown函数
chown(path::AbstractString, owner::Integer, group::Integer=-1)

path 的所有者和/或组更改为 owner 和/或 group。如果为 ownergroup 输入的值为 -1,则相应的 ID 不会更改。目前仅支持整数 ownergroup。返回 path

源代码
Base.Libc.RawFD类型
RawFD

包装原生操作系统文件描述符的原始类型。RawFD 可以传递给诸如 stat 之类的方法以发现有关底层文件的信息,并且还可以用于打开流,其中 RawFD 描述了流所基于的操作系统文件。

源代码
Base.stat函数
stat(file)

返回一个结构体,其字段包含有关文件的信息。结构体的字段如下:

名称描述
desc路径或操作系统文件描述符
size文件的大小(以字节为单位)
device包含文件的设备的 ID
inode文件的 inode 号
mode文件的保护模式
nlink指向文件的硬链接数
uid文件所有者的用户 ID
gid文件所有者的组 ID
rdev如果此文件引用设备,则为其引用的设备的 ID
blksize文件的文件系统首选块大小
blocks分配的此类块的数量
mtime文件上次修改的 Unix 时间戳
ctime文件元数据更改的 Unix 时间戳
源代码
Base.Filesystem.diskstat函数
diskstat(path=pwd())

以字节为单位返回有关包含由 path 指向的文件或目录的磁盘的统计信息。如果没有传递参数,则返回有关包含当前工作目录的磁盘的统计信息。

Julia 1.8

此方法在 Julia 1.8 中添加。

源代码
Base.Filesystem.lstat函数
lstat(file)

类似于 stat,但对于符号链接,获取链接本身的信息而不是其引用的文件的信息。此函数必须在文件路径上调用,而不是在文件对象或文件描述符上调用。

源代码
Base.Filesystem.uperm函数
uperm(file)

获取文件所有者的权限,作为以下值的位字段:

描述
01执行权限
02写入权限
04读取权限

有关允许的参数,请参见 stat

源代码
Base.Filesystem.cp函数
cp(src::AbstractString, dst::AbstractString; force::Bool=false, follow_symlinks::Bool=false)

将文件、链接或目录从 src 复制到 dstforce=true 将首先删除现有的 dst

如果 follow_symlinks=falsesrc 是符号链接,则 dst 将被创建为符号链接。如果 follow_symlinks=truesrc 是符号链接,则 dst 将是 src 所引用的文件或目录的副本。返回 dst

注意

cp 函数与 cp 命令不同。cp 函数始终假设 dst 是文件,而命令则根据 dst 是目录还是文件执行不同的操作。当 dst 是目录时使用 force=true 将导致 dst 目录中所有内容的丢失,并且 dst 将变为包含 src 内容的文件。

源代码
Base.download函数
download(url::AbstractString, [path::AbstractString = tempname()]) -> path

从给定的 url 下载文件,将其保存到位置 path,或者如果未指定,则保存到临时路径。返回下载文件的路径。

注意

从 Julia 1.6 开始,此函数已弃用,并且只是 Downloads.download 的一个简单包装器。在新代码中,您应该直接使用该函数,而不是调用此函数。

源代码
Base.Filesystem.mv函数
mv(src::AbstractString, dst::AbstractString; force::Bool=false)

将文件、链接或目录从 src 移动到 dstforce=true 将首先删除现有的 dst。返回 dst

示例

julia> write("hello.txt", "world");

julia> mv("hello.txt", "goodbye.txt")
"goodbye.txt"

julia> "hello.txt" in readdir()
false

julia> readline("goodbye.txt")
"world"

julia> write("hello.txt", "world2");

julia> mv("hello.txt", "goodbye.txt")
ERROR: ArgumentError: 'goodbye.txt' exists. `force=true` is required to remove 'goodbye.txt' before moving.
Stacktrace:
 [1] #checkfor_mv_cp_cptree#10(::Bool, ::Function, ::String, ::String, ::String) at ./file.jl:293
[...]

julia> mv("hello.txt", "goodbye.txt", force=true)
"goodbye.txt"

julia> rm("goodbye.txt");
源代码
Base.Filesystem.rm函数
rm(path::AbstractString; force::Bool=false, recursive::Bool=false)

删除给定路径下的文件、链接或空目录。如果传递了 force=true,则不存在的路径不会被视为错误。如果传递了 recursive=true 且路径是目录,则所有内容都将被递归删除。

示例

julia> mkpath("my/test/dir");

julia> rm("my", recursive=true)

julia> rm("this_file_does_not_exist", force=true)

julia> rm("this_file_does_not_exist")
ERROR: IOError: unlink("this_file_does_not_exist"): no such file or directory (ENOENT)
Stacktrace:
[...]
源代码
Base.Filesystem.touch函数
Base.touch(::Pidfile.LockMonitor)

更新锁上的 mtime,以指示它仍然是新鲜的。

另请参阅 mkpidlock 构造函数中的 refresh 关键字。

touch(path::AbstractString)
touch(fd::File)

将文件上的上次修改时间戳更新为当前时间。

如果文件不存在,则创建一个新文件。

返回 path

示例

julia> write("my_little_file", 2);

julia> mtime("my_little_file")
1.5273815391135583e9

julia> touch("my_little_file");

julia> mtime("my_little_file")
1.527381559163435e9

我们可以看到 touch 修改了 mtime

源代码
Base.Filesystem.tempname函数
tempname(parent=tempdir(); cleanup=true) -> String

生成一个临时文件路径。此函数仅返回路径;不会创建任何文件。该路径很可能唯一,但由于两次同时调用 tempname 生成相同文件名的可能性极小,因此无法保证这一点。该名称保证与调用 tempname 时已存在的全部文件不同。

当不带任何参数调用时,临时名称将是系统临时目录中临时名称的绝对路径,由 tempdir() 给出。如果给出了 parent 目录参数,则临时路径将位于该目录中。

cleanup 选项控制进程是否尝试在进程退出时自动删除返回的路径。请注意,tempname 函数不会在返回的位置创建任何文件或目录,因此除非您在那里创建文件或目录,否则无需清理。如果您确实创建了文件或目录并且 cleantrue,则它将在进程终止时被删除。

Julia 1.4

parentcleanup 参数是在 1.4 中添加的。在 Julia 1.4 之前,路径 tempname 永远不会在进程终止时被清理。

警告

如果另一个进程获取了相同的文件名并在您能够创建文件之前创建了该文件,这可能会导致安全漏洞。如果这是个问题,请使用 JL_O_EXCL 打开文件。也建议改为使用 mktemp()

源代码
Base.Filesystem.tempdir函数
tempdir()

获取临时目录的路径。在 Windows 上,tempdir() 使用按顺序排列的列表 TMPTEMPUSERPROFILE 中找到的第一个环境变量。在所有其他操作系统上,tempdir() 使用按顺序排列的列表 TMPDIRTMPTEMPTEMPDIR 中找到的第一个环境变量。如果未找到这些变量中的任何一个,则使用路径 "/tmp"

源代码
Base.Filesystem.mktemp方法
mktemp(parent=tempdir(); cleanup=true) -> (path, io)

返回 (path, io),其中 pathparent 中新临时文件的路径,而 io 是此路径的打开文件对象。cleanup 选项控制进程退出时是否自动删除临时文件。

Julia 1.3

cleanup 关键字参数是在 Julia 1.3 中添加的。相关地,从 1.3 开始,Julia 将在 Julia 进程退出时删除 mktemp 创建的临时路径,除非 cleanup 显式设置为 false

源代码
Base.Filesystem.mktempdir方法
mktempdir(parent=tempdir(); prefix="jl_", cleanup=true) -> path

parent 目录中创建一个临时目录,其名称由给定的 prefix 和随机后缀构成,并返回其路径。此外,在某些平台上,prefix 中的任何尾随 'X' 字符都可能会被随机字符替换。如果 parent 不存在,则抛出错误。cleanup 选项控制进程退出时是否自动删除临时目录。

Julia 1.2

prefix 关键字参数是在 Julia 1.2 中添加的。

Julia 1.3

cleanup 关键字参数是在 Julia 1.3 中添加的。相关地,从 1.3 开始,Julia 将在 Julia 进程退出时删除 mktempdir 创建的临时路径,除非 cleanup 显式设置为 false

另请参阅:mktempmkdir

源代码
Base.Filesystem.isdir函数
isdir(path) -> Bool

如果 path 是目录,则返回 true,否则返回 false

示例

julia> isdir(homedir())
true

julia> isdir("not/a/directory")
false

另请参阅 isfileispath

源代码
Base.Filesystem.isfile函数
isfile(path) -> Bool

如果path是普通文件,则返回true,否则返回false

示例

julia> isfile(homedir())
false

julia> filename = "test_file.txt";

julia> write(filename, "Hello world!");

julia> isfile(filename)
true

julia> rm(filename);

julia> isfile(filename)
false

另请参阅 isdirispath

源代码
Base.Filesystem.homedir函数
homedir() -> String

返回当前用户的家目录。

注意

homedir通过libuvuv_os_homedir确定家目录。有关详细信息(例如如何通过环境变量指定家目录),请参阅uv_os_homedir文档

源代码
Base.Filesystem.dirname函数
dirname(path::AbstractString) -> String

获取路径的目录部分。路径中的尾随字符('/' 或 '\')被视为路径的一部分。

示例

julia> dirname("/home/myuser")
"/home"

julia> dirname("/home/myuser/")
"/home/myuser"

另请参阅 basename

源代码
Base.Filesystem.basename函数
basename(path::AbstractString) -> String

获取路径的文件名部分。

注意

此函数与Unix basename程序略有不同,后者会忽略尾随斜杠,例如$ basename /foo/bar/返回bar,而Julia中的basename返回空字符串""

示例

julia> basename("/home/myuser/example.jl")
"example.jl"

julia> basename("/home/myuser/")
""

另请参阅 dirname

源代码
Base.Filesystem.isabspath函数
isabspath(path::AbstractString) -> Bool

确定路径是否为绝对路径(从根目录开始)。

示例

julia> isabspath("/home")
true

julia> isabspath("home")
false
源代码
Base.Filesystem.isdirpath函数
isdirpath(path::AbstractString) -> Bool

确定路径是否引用目录(例如,以路径分隔符结尾)。

示例

julia> isdirpath("/home")
false

julia> isdirpath("/home/")
true
源代码
Base.Filesystem.joinpath函数
joinpath(parts::AbstractString...) -> String
joinpath(parts::Vector{AbstractString}) -> String
joinpath(parts::Tuple{AbstractString}) -> String

将路径组件连接成完整路径。如果某些参数是绝对路径或(在Windows上)具有与前面路径的连接计算出的驱动器不匹配的驱动器规范,则会删除之前的组件。

关于Windows的说明,由于每个驱动器都有一个当前目录,因此joinpath("c:", "foo")表示相对于驱动器“c:”上的当前目录的路径,因此它等于“c:foo”,而不是“c:\foo”。此外,joinpath将此视为非绝对路径并忽略驱动器盘符的大小写,因此joinpath("C:\A","c:b") = "C:\A\b"

示例

julia> joinpath("/home/myuser", "example.jl")
"/home/myuser/example.jl"
julia> joinpath(["/home/myuser", "example.jl"])
"/home/myuser/example.jl"
源代码
Base.Filesystem.abspath函数
abspath(path::AbstractString) -> String

通过根据需要添加当前目录将路径转换为绝对路径。还规范化路径,如normpath中所示。

示例

如果您位于名为JuliaExample的目录中,并且您正在使用的数据相对于JuliaExample目录向上两级,则可以编写

abspath("../../data")

这将提供类似"/home/JuliaUser/data/"的路径。

另请参阅 joinpathpwdexpanduser

源代码
abspath(path::AbstractString, paths::AbstractString...) -> String

通过将路径集连接在一起并在必要时添加当前目录,将路径集转换为绝对路径。等效于abspath(joinpath(path, paths...))

源代码
Base.Filesystem.normpath函数
normpath(path::AbstractString) -> String

规范化路径,删除“.”和“..”条目,并将“/”更改为系统规范的路径分隔符。

示例

julia> normpath("/home/myuser/../example.jl")
"/home/example.jl"

julia> normpath("Documents/Julia") == joinpath("Documents", "Julia")
true
源代码
normpath(path::AbstractString, paths::AbstractString...) -> String

通过将路径集连接在一起并删除“.”和“..”条目,将路径集转换为规范化路径。等效于normpath(joinpath(path, paths...))

源代码
Base.Filesystem.realpath函数
realpath(path::AbstractString) -> String

通过扩展符号链接并删除“.”和“..”条目来规范化路径。在不区分大小写但保留大小写的文件系统(通常是Mac和Windows)上,将返回文件系统中存储的路径大小写。

(如果path在文件系统中不存在,则此函数会抛出异常。)

源代码
Base.Filesystem.relpath函数
relpath(path::AbstractString, startpath::AbstractString = ".") -> String

返回相对于当前目录或可选的起始目录的path的相对文件路径。这是一个路径计算:不会访问文件系统以确认pathstartpath的存在或性质。

在Windows上,区分大小写应用于路径的每个部分,除了驱动器盘符。如果pathstartpath引用不同的驱动器,则返回path的绝对路径。

源代码
Base.Filesystem.samefile函数
samefile(path_a::AbstractString, path_b::AbstractString)

检查路径path_apath_b是否引用相同的存在文件或目录。

源代码
Base.Filesystem.splitdir函数
splitdir(path::AbstractString) -> (AbstractString, AbstractString)

将路径拆分为目录名和文件名的元组。

示例

julia> splitdir("/home/myuser")
("/home", "myuser")
源代码
Base.Filesystem.splitdrive函数
splitdrive(path::AbstractString) -> (AbstractString, AbstractString)

在Windows上,将路径拆分为驱动器盘符部分和路径部分。在Unix系统上,第一个组件始终为空字符串。

源代码
Base.Filesystem.splitext函数
splitext(path::AbstractString) -> (String, String)

如果路径的最后一个组件包含一个或多个点,则将路径拆分为最后一个点之前的所有内容以及包括和之后的点的所有内容。否则,返回未修改的参数和空字符串的元组。“splitext”是“split extension”的缩写。

示例

julia> splitext("/home/myuser/example.jl")
("/home/myuser/example", ".jl")

julia> splitext("/home/myuser/example.tar.gz")
("/home/myuser/example.tar", ".gz")

julia> splitext("/home/my.user/example")
("/home/my.user/example", "")
源代码
Base.Filesystem.splitpath函数
splitpath(path::AbstractString) -> Vector{String}

将文件路径拆分为其所有路径组件。这与joinpath相反。返回一个子字符串数组,每个子字符串代表路径中的每个目录或文件,包括根目录(如果存在)。

Julia 1.1

此函数需要至少 Julia 1.1。

示例

julia> splitpath("/home/myuser/example.jl")
4-element Vector{String}:
 "/"
 "home"
 "myuser"
 "example.jl"
源代码