FS (ファイルシステム) モジュール

このモジュールは、ファイルシステムを検査するための関数を提供します。バージョン0.53.0以降で使用可能です。

0.59.0以降、すべての関数は、何か有用な処理ができる場合(existsis_diris_fileis_absoluteは除く。files()オブジェクトは常に既存ファイルへの絶対パスであるため)、files()オブジェクトを受け入れます。

使用方法

このモジュールは、次のようにインポートできます。

fs = import('fs')

ファイル検索ルール

絶対パスではないパスは、現在のmeson.buildファイルのあるディレクトリを基準に検索されます。

指定されている場合、先頭の~はユーザーのホームディレクトリに展開されます。環境変数は、Meson全体を通してルールどおりには使用できません。つまり、$HOME、%USERPROFILE%、$MKLROOTなどは、Mesonファイルシステムモジュールでは意味を持ちません。必要に応じて、meson.options、ネイティブファイル、またはクロスファイルでコマンドラインオプションを通じて、そのような変数を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)メソッドは、ファイルの16進数のhash_algorithmダイジェストを含む文字列を返します。hash_algorithmは文字列です。使用可能なハッシュアルゴリズムには、md5、sha1、sha224、sha256、sha384、sha512などがあります。

size

fs.size(filename)メソッドは、ファイルサイズを整数バイトで返します。

is_samepath

fs.is_samepath(path1, path2)は、両方のパスが同じパスに解決される場合、ブール値trueを返します。たとえば、path1がシンボリックリンクで、path2が相対パスであるとします。path1path2に解決できる場合、trueが返されます。path1path2に解決されない場合、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)は、Unix系システム上であっても、Windowsパスを想定します。したがって、すべての'\'または'\\'は'/'に変換されます。文字をエスケープしようとした場合でも同様です。

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引数のbasenameになります。

次のキーワード引数があります。

  • install bool: コピーしたファイルをインストールするかどうか。デフォルトはfalse。
  • install_dir str: ファイルをインストールする場所。
  • install_tag: str: このターゲットに割り当てるインストールタグ。
  • install_mode array[str | int]: ファイルをインストールするモード。

戻り値

copy = fs.copyfile('input-file', 'output-file')

検索の結果は