檔案系統

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 為 false 時,readdir 僅傳回目錄中的名稱;當 join 為 true 時,它會為每個 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)

使用名稱 dst 建立現有來源檔案 src 的硬連結。目的地 dst 不得存在。

另請參閱:symlink

Julia 1.8

此方法已新增至 Julia 1.8。

原始碼
Base.Filesystem.symlink函數
symlink(target::AbstractString, link::AbstractString; dir_target = false)

使用名稱 link 建立指向 target 的符號連結。

在 Windows 上,符號連結必須明確宣告為指向目錄或非目錄。如果 target 已存在,預設 link 的類型會自動偵測,但如果 target 不存在,此函式會預設建立檔案符號連結,除非 dir_target 設為 true。請注意,如果使用者設定 dir_target,但 target 存在且為檔案,系統仍會建立目錄符號連結,但取消參照符號連結會失敗,就像使用者在建立目錄前呼叫 symlink()(將 dir_target 設為 false)建立檔案符號連結並嘗試取消參照至目錄一樣。

此外,在 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=false,而且 src 是符號連結,則 dst 會建立為符號連結。如果 follow_symlinks=true 而且 src 是符號連結,則 dst 會是 src 參照的檔案或目錄的副本。傳回 dst

注意

cp 函數與 cp 指令不同。cp 函數總是假設 dst 是檔案,而指令會根據 dst 是目錄還是檔案而執行不同的動作。當 dst 是目錄時使用 force=true 會導致 dst 目錄中所有內容遺失,而且 dst 會變成包含 src 內容的檔案。

原始碼
Base.download函數
download(url::AbstractString, [path::AbstractString = tempname()]) -> path

從指定的網址下載檔案,並儲存到位置 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

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

原始碼
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"
原始碼