FS (檔案系統) 模組

此模組提供檢查檔案系統的函式。它從 0.53.0 版本開始提供。

從 0.59.0 版本開始,所有函式如果可以對 files() 物件執行有用的操作,都會接受它們(這不包括 existsis_diris_fileis_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。

接受單一字串或(自 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。如果 path1path2 不存在,則傳回 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')

搜尋結果為