文件系统 (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]
: 用来安装文件的模式
返回
- 一个
custom_target()
对象
copy = fs.copyfile('input-file', 'output-file')
搜索结果为