Filesystem

Base.readMethod
read(filename::AbstractString)

将文件的全部内容读取为 Vector{UInt8}

read(filename::AbstractString, String)

将文件的全部内容读取为字符串。

read(filename::AbstractString, args...)

打开一个文件并读取其内容。args 被传递给 read:这相当于 open(io->read(io, args...), filename)

source
Base.writeMethod
write(filename::AbstractString, content)

content 的规范二进制表示写入文件,如果文件尚不存在,则会创建该文件;如果文件已存在,则会覆盖该文件。

返回写入文件的字节数。

source
Base.Filesystem.pwdFunction
pwd() -> String

获取当前工作目录。

另见:cd, tempdir

示例

julia> pwd()
"/home/JuliaUser"

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

julia> pwd()
"/home/JuliaUser/Projects/julia"
source
Base.Filesystem.cdMethod
cd(dir::AbstractString=homedir())

设置当前工作目录。

另请参见:pwd, mkdir, mkpath, mktempdir

示例

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

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

julia> cd()

julia> pwd()
"/home/JuliaUser"
source
Base.Filesystem.cdMethod
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"
source
Base.Filesystem.readdirFunction
readdir(dir::AbstractString=pwd();
    join::Bool = false,
    sort::Bool = true,
) -> Vector{String}

返回目录 dir 中的名称,如果未给出,则返回当前工作目录的名称。当 join 为 false 时,readdir 仅返回目录中的名称;当 join 为 true 时,它返回 joinpath(dir, name) 对于每个 name,以便返回的字符串是完整路径。如果您想要获取绝对路径,请使用绝对目录路径调用 readdir,并将 join 设置为 true。

默认情况下,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"
source
Base.Filesystem.walkdirFunction
walkdir(dir; topdown=true, follow_symlinks=false, onerror=throw)

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

另见: readdir

示例

for (root, dirs, files) in walkdir(".")
    println("Directories in $root")
    for dir in dirs
        println(joinpath(root, dir)) # 目录的路径
    end
    println("Files in $root")
    for file in files
        println(joinpath(root, file)) # 文件的路径
    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[])
source
Base.Filesystem.mkdirFunction
mkdir(path::AbstractString; mode::Unsigned = 0o777)

创建一个名为 path 的新目录,权限为 modemode 默认为 0o777,并受到当前文件创建掩码的影响。此函数从不创建超过一个目录。如果目录已经存在,或者某些中间目录不存在,此函数会抛出错误。请参见 mkpath 以获取创建所有所需中间目录的函数。返回 path

示例

julia> mkdir("testingdir")
"testingdir"

julia> cd("testingdir")

julia> pwd()
"/home/JuliaUser/testingdir"
source
Base.Filesystem.mkpathFunction
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") # 创建三个目录
"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") # 创建两个目录
"intermediate_dir/actually_a_directory.txt"

julia> isdir("intermediate_dir/actually_a_directory.txt")
true
source
Base.Filesystem.hardlinkFunction
hardlink(src::AbstractString, dst::AbstractString)

创建一个指向现有源文件 src 的硬链接,名称为 dst。目标 dst 不能存在。

另见:symlink

Julia 1.8

此方法是在 Julia 1.8 中添加的。

source
Base.Filesystem.symlinkFunction
symlink(target::AbstractString, link::AbstractString; dir_target = false)

创建一个指向 target 的符号链接,名称为 link

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

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

另请参见: hardlink

Note

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

Julia 1.6

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

source
Base.Filesystem.chmodFunction
chmod(path::AbstractString, mode::Integer; recursive::Bool=false)

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

Note

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

source
Base.Filesystem.chownFunction
chown(path::AbstractString, owner::Integer, group::Integer=-1)

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

source
Base.Libc.RawFDType
RawFD

原始类型,封装了本地操作系统文件描述符。RawFD可以传递给像stat这样的函数,以发现有关底层文件的信息,也可以用于打开流,RawFD描述了支持该流的操作系统文件。

source
Base.statFunction
stat(file)

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

名称类型描述
descUnion{String, Base.OS_HANDLE}文件的路径或操作系统文件描述符
sizeInt64文件的大小(以字节为单位)
deviceUInt包含该文件的设备的ID
inodeUInt文件的inode号
modeUInt文件的保护模式
nlinkInt指向该文件的硬链接数量
uidUInt文件所有者的用户ID
gidUInt文件所有者的组ID
rdevUInt如果该文件指向一个设备,则指向该设备的ID
blksizeInt64文件系统为该文件首选的块大小
blocksInt64分配的512字节块的数量
mtimeFloat64文件最后修改的Unix时间戳
ctimeFloat64文件元数据更改的Unix时间戳
source
Base.Filesystem.diskstatFunction
diskstat(path=pwd())

返回关于包含由 path 指向的文件或目录的磁盘的字节统计信息。如果未传递任何参数,则返回包含当前工作目录的磁盘的统计信息。

Julia 1.8

此方法是在 Julia 1.8 中添加的。

source
Base.Filesystem.lstatFunction
lstat(file)

stat 一样,但对于符号链接获取的是链接本身的信息,而不是它所指向的文件的信息。此函数必须在文件路径上调用,而不是文件对象或文件描述符上。

source
Base.Filesystem.upermFunction
uperm(file)

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

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

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

source
Base.Filesystem.cpFunction
cp(src::AbstractString, dst::AbstractString; force::Bool=false, follow_symlinks::Bool=false)

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

如果 follow_symlinks=false,并且 src 是一个符号链接,则 dst 将作为符号链接创建。如果 follow_symlinks=true 并且 src 是一个符号链接,则 dst 将是 src 所指向的文件或目录的副本。返回 dst

Note

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

source
Base.downloadFunction
download(url::AbstractString, [path::AbstractString = tempname()]) -> path

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

Note

从 Julia 1.6 开始,此函数已被弃用,仅是 Downloads.download 的一个薄包装。在新代码中,您应该直接使用该函数,而不是调用这个。

source
Base.Filesystem.mvFunction
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");
source
Base.Filesystem.rmFunction
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:
[...]
source
Base.Filesystem.touchFunction
Base.touch(::Pidfile.LockMonitor)

更新锁的 mtime,以表明它仍然是新鲜的。

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

source
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

我们可以看到 mtime 已被 touch 修改。

source
Base.Filesystem.tempnameFunction
tempname(parent=tempdir(); cleanup=true) -> String

生成一个临时文件路径。此函数仅返回一个路径;不会创建文件。该路径可能是唯一的,但由于两个同时调用 tempname 生成相同文件名的可能性非常小,因此无法保证。该名称保证与调用 tempname 时已存在的所有文件不同。

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

cleanup 选项控制进程在退出时是否尝试自动删除返回的路径。请注意,tempname 函数不会在返回的位置创建任何文件或目录,因此除非您在该位置创建文件或目录,否则没有任何内容需要清理。如果您这样做并且 cleanuptrue,则在进程终止时将被删除。

Julia 1.4

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

Warning

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

source
Base.Filesystem.tempdirFunction
tempdir()

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

source
Base.Filesystem.mktempMethod
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

source
Base.Filesystem.mktempdirMethod
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

另见: mktemp, mkdir.

source
Base.Filesystem.isdirFunction
isdir(path) -> Bool

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

示例

julia> isdir(homedir())
true

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

另见 isfileispath

source
Base.Filesystem.isfileFunction
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

source
Base.Filesystem.dirnameFunction
dirname(path::AbstractString) -> String

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

示例

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

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

另见 basename.

source
Base.Filesystem.basenameFunction
basename(path::AbstractString) -> String

获取路径的文件名部分。

Note

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

示例

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

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

另见 dirname.

source
Base.Filesystem.isabspathFunction
isabspath(path::AbstractString) -> Bool

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

示例

julia> isabspath("/home")
true

julia> isabspath("home")
false
source
Base.Filesystem.isdirpathFunction
isdirpath(path::AbstractString) -> Bool

确定路径是否指向一个目录(例如,是否以路径分隔符结尾)。

示例

julia> isdirpath("/home")
false

julia> isdirpath("/home/")
true
source
Base.Filesystem.joinpathFunction
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"
source
Base.Filesystem.abspathFunction
abspath(path::AbstractString) -> String

通过在必要时添加当前目录,将路径转换为绝对路径。还会像 normpath 一样规范化路径。

示例

如果您在一个名为 JuliaExample 的目录中,并且您使用的数据相对于 JuliaExample 目录在上面两级,您可以写:

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

这将给出类似 "/home/JuliaUser/data/" 的路径。

另请参见 joinpathpwdexpanduser

source
abspath(path::AbstractString, paths::AbstractString...) -> String

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

source
Base.Filesystem.normpathFunction
normpath(path::AbstractString) -> String

规范化路径,移除 "." 和 ".." 条目,并将 "/" 更改为系统的标准路径分隔符。

示例

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

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

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

source
Base.Filesystem.realpathFunction
realpath(path::AbstractString) -> String

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

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

source
Base.Filesystem.relpathFunction
relpath(path::AbstractString, startpath::AbstractString = ".") -> String

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

在 Windows 上,路径的每个部分都应用大小写敏感性,除了驱动器字母。如果 pathstartpath 指向不同的驱动器,则返回 path 的绝对路径。

source
Base.Filesystem.samefileFunction
samefile(path_a::AbstractString, path_b::AbstractString)

检查路径 path_apath_b 是否指向同一个现有的文件或目录。

source
Base.Filesystem.splitdirFunction
splitdir(path::AbstractString) -> (AbstractString, AbstractString)

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

示例

julia> splitdir("/home/myuser")
("/home", "myuser")
source
Base.Filesystem.splitdriveFunction
splitdrive(path::AbstractString) -> (AbstractString, AbstractString)

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

source
Base.Filesystem.splitextFunction
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", "")
source
Base.Filesystem.splitpathFunction
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"
source