FS (檔案系統) 模組
此模組提供檢查檔案系統的函式。它從 0.53.0 版本開始提供。
從 0.59.0 版本開始,所有函式如果可以對 files()
物件執行有用的操作,都會接受它們(這不包括 exists
、is_dir
、is_file
、is_absolute
,因為 files()
物件始終是現有檔案的絕對路徑)。
用法
可以如下方式匯入模組
fs = import('fs')
檔案查找規則
非絕對路徑會根據目前 meson.build
檔案所在的目錄進行查找。
如果指定了,開頭的 ~
會展開為使用者主目錄。環境變數不可用,這也是 Meson 中的規則。也就是說,$HOME、%USERPROFILE%、$MKLROOT 等對 Meson 檔案系統模組沒有意義。如果需要,請透過 meson.options
、native-file 或 cross-file 中的命令列選項將這些變數傳遞到 Meson 中。
在可能的情況下,符號連結和父目錄表示法會解析為絕對路徑。
exists
接受單一字串引數,如果檔案系統上存在具有該名稱的實體,則傳回 true。這可以是檔案、目錄或裝置節點等特殊條目。
is_dir
接受單一字串引數,如果檔案系統上存在具有該名稱的目錄,則傳回 true。
is_file
接受單一字串引數,如果檔案系統上存在具有該名稱的檔案,則傳回 true。
is_symlink
接受單一字串或(自 0.59.0 版本起)files()
引數,如果字串指向的路徑是符號連結,則傳回 true。
檔案參數
is_absolute
自 0.54.0 版本起
傳回布林值,指示指定的路徑字串或(自 0.59.0 版本起)files()
是否為絕對路徑,而不會展開 ~
。
範例
fs.is_absolute('~') # false
home = fs.expanduser('~')
fs.is_absolute(home) # true
fs.is_absolute(home / 'foo') # true, even if ~/foo doesn't exist
fs.is_absolute('foo/bar') # false, even if ./foo/bar exists
hash
fs.hash(filename, hash_algorithm)
方法傳回包含檔案的十六進位 hash_algorithm
摘要的字串。hash_algorithm
是一個字串;可用的雜湊演算法包括:md5、sha1、sha224、sha256、sha384、sha512。
size
fs.size(filename)
方法傳回檔案大小,以整數位元組為單位。
is_samepath
如果兩個路徑解析為相同路徑,則 fs.is_samepath(path1, path2)
傳回布林值 true
。例如,假設 path1 是一個符號連結,而 path2 是一個相對路徑。如果 path1
可以解析為 path2
,則傳回 true
。如果 path1
未解析為 path2
,則傳回 false
。如果 path1
或 path2
不存在,則傳回 false
。
範例
x = 'foo.txt'
y = 'sub/../foo.txt'
z = 'bar.txt' # a symlink pointing to foo.txt
j = 'notafile.txt' # nonexistent file
fs.is_samepath(x, y) # true
fs.is_samepath(x, z) # true
fs.is_samepath(x, j) # false
p = 'foo/bar'
q = 'foo/bar/baz/..'
r = 'buz' # a symlink pointing to foo/bar
s = 'notapath' # nonexistent directory
fs.is_samepath(p, q) # true
fs.is_samepath(p, r) # true
fs.is_samepath(p, s) # false
檔案名稱修改
對於這些路徑字串操作方法,檔案實際上不需要存在。
expanduser
自 0.54.0 版本起
開頭為 ~
的路徑字串會展開為使用者主目錄
範例
fs.expanduser('~') # user home directory
fs.expanduser('~/foo') # <homedir>/foo
as_posix
自 0.54.0 版本起
fs.as_posix(path)
假設為 Windows 路徑,即使是在類 Unix 系統上也是如此。因此,所有 '\'
或 '\\'
都會轉換為 '/',即使您原本打算逸脫字元也是如此。
範例
fs.as_posix('\\') == '/' # true
fs.as_posix('\\\\') == '/' # true
fs.as_posix('foo\\bar/baz') == 'foo/bar/baz' # true
replace_suffix
replace_suffix
方法是一種用於修改檔案名稱的方便字串操作。它允許變更檔案名稱後綴,例如
交換後綴
original = '/opt/foo.ini'
new = fs.replace_suffix(original, '.txt') # /opt/foo.txt
新增後綴
original = '/opt/foo'
new = fs.replace_suffix(original, '.txt') # /opt/foo.txt
複合後綴交換
original = '/opt/foo.dll.a'
new = fs.replace_suffix(original, '.so') # /opt/foo.dll.so
刪除後綴
original = '/opt/foo.dll.a'
new = fs.replace_suffix(original, '') # /opt/foo.dll
parent
傳回父目錄(即 dirname)。
new = fs.parent('foo/bar') # foo
new = fs.parent('foo/bar/baz.dll') # foo/bar
name
傳回路徑的最後一個組成部分(即 basename)。
fs.name('foo/bar/baz.dll.a') # baz.dll.a
stem
自 0.54.0 版本起
傳回路徑的最後一個組成部分,並刪除後綴的最後一部分
fs.stem('foo/bar/baz.dll') # baz
fs.stem('foo/bar/baz.dll.a') # baz.dll
read
-
read(path, encoding: 'utf-8')
(自 0.57.0 版本起):傳回包含給定path
內容的字串。如果未指定encoding
關鍵字引數,則假設由path
指定的檔案以 utf-8 編碼。不支援二進位檔案。提供的路徑應該相對於目前的meson.current_source_dir()
,或是可接受建置目錄之外的絕對路徑。如果由path
指定的檔案變更,則會觸發 Meson 重新配置專案。如果由path
指定的檔案是files()
物件,則不能參照已建置的檔案。
relative_to
自 1.3.0 版本起
傳回相對檔案路徑。如果找不到相對路徑,則傳回 to
的絕對路徑。相對路徑引數會被假設為相對於 meson.current_source_dir()
。
具有以下位置引數
- to
str | file | custom_tgt | custom_idx | build_tgt
:結束路徑 - from
str | file | custom_tgt | custom_idx | build_tgt
:開始路徑
傳回
- 字串
copyfile
自 0.64.0 版本起
在建置時將檔案從來源目錄複製到建置目錄
具有以下位置引數
- src
File | str
:要複製的檔案
具有以下選擇性引數
- dest
str
:輸出檔案的名稱。如果未設定,則會是 src 引數的基本名稱
具有以下關鍵字引數
- install
bool
:是否安裝複製的檔案,預設為 false - install_dir
str
:將檔案安裝到何處 - install_tag:
str
:指派給此目標的安裝標籤 - install_mode
array[str | int]
:安裝檔案所用的模式
傳回
copy = fs.copyfile('input-file', 'output-file')
搜尋結果為