FS (ファイルシステム) モジュール
このモジュールは、ファイルシステムを検査するための関数を提供します。バージョン0.53.0以降で使用可能です。
0.59.0以降、すべての関数は、何か有用な処理ができる場合(exists
、is_dir
、is_file
、is_absolute
は除く。files()
オブジェクトは常に既存ファイルへの絶対パスであるため)、files()
オブジェクトを受け入れます。
使用方法
このモジュールは、次のようにインポートできます。
fs = import('fs')
ファイル検索ルール
絶対パスではないパスは、現在のmeson.build
ファイルのあるディレクトリを基準に検索されます。
指定されている場合、先頭の~
はユーザーのホームディレクトリに展開されます。環境変数は、Meson全体を通してルールどおりには使用できません。つまり、$HOME、%USERPROFILE%、$MKLROOTなどは、Mesonファイルシステムモジュールでは意味を持ちません。必要に応じて、meson.options
、ネイティブファイル、またはクロスファイルでコマンドラインオプションを通じて、そのような変数を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)
メソッドは、ファイルの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が相対パスであるとします。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)
は、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]
: ファイルをインストールするモード。
戻り値
custom_target()
オブジェクト
copy = fs.copyfile('input-file', 'output-file')
検索の結果は