文件系统 (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')

搜索结果为