FS (Dateisystem) Modul
Dieses Modul stellt Funktionen zur Untersuchung des Dateisystems bereit. Es ist ab Version 0.53.0 verfügbar.
Seit 0.59.0 akzeptieren alle Funktionen files() Objekte, wenn sie etwas Nützliches damit tun können (dies schließt exists, is_dir, is_file, is_absolute aus, da ein files() Objekt immer der absolute Pfad zu einer vorhandenen Datei ist).
Verwendung
Das Modul kann wie folgt importiert werden
fs = import('fs')
Dateisuche-Regeln
Nicht-absolute Pfade werden relativ zum Verzeichnis gesucht, in dem sich die aktuelle meson.build Datei befindet.
Falls angegeben, wird ein führendes ~ zum Home-Verzeichnis des Benutzers erweitert. Umgebungsvariablen sind nicht verfügbar, wie es die Regel im gesamten Meson ist. Das heißt, $HOME, %USERPROFILE%, $MKLROOT usw. haben keine Bedeutung für das Meson Dateisystem-Modul. Falls erforderlich, übergeben Sie solche Variablen über Kommandozeilenoptionen in meson.options, Native-Datei oder Cross-Datei an Meson.
Wo immer möglich, werden Symlinks und übergeordnete Verzeichnisse zur Notation zu einem absoluten Pfad aufgelöst.
exists
Nimmt ein einzelnes String-Argument und gibt true zurück, wenn eine Entität mit diesem Namen im Dateisystem existiert. Dies kann eine Datei, ein Verzeichnis oder ein spezieller Eintrag wie ein Geräteknoten sein.
is_dir
Nimmt ein einzelnes String-Argument und gibt true zurück, wenn ein Verzeichnis mit diesem Namen im Dateisystem existiert.
is_file
Nimmt ein einzelnes String-Argument und gibt true zurück, wenn eine Datei mit diesem Namen im Dateisystem existiert.
is_symlink
Nimmt ein einzelnes String- oder (seit 0.59.0) files() Argument und gibt true zurück, wenn der Pfad, auf den der String zeigt, ein symbolischer Link ist.
Dateiparameter
is_absolute
seit 0.54.0
Gibt einen booleschen Wert zurück, der angibt, ob der angegebene Pfad-String oder (seit 0.59.0) files() absolut ist, OHNE ~ zu erweitern.
Beispiele
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
Die Methode fs.hash(filename, hash_algorithm) gibt einen String mit dem hexadezimalen hash_algorithm Digest einer Datei zurück. hash_algorithm ist ein String; die verfügbaren Hash-Algorithmen umfassen: md5, sha1, sha224, sha256, sha384, sha512.
size
Die Methode fs.size(filename) gibt die Größe der Datei in ganzen Bytes zurück.
is_samepath
fs.is_samepath(path1, path2) gibt den booleschen Wert true zurück, wenn beide Pfade zum selben Pfad aufgelöst werden. Zum Beispiel, nehmen wir an, path1 ist ein Symlink und path2 ist ein relativer Pfad. Wenn path1 zu path2 aufgelöst werden kann, wird true zurückgegeben. Wenn path1 nicht zu path2 aufgelöst wird, wird false zurückgegeben. Wenn path1 oder path2 nicht existieren, wird false zurückgegeben.
Beispiele
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
Dateinamenänderung
Die Dateien müssen noch nicht unbedingt existieren für diese Pfad-String-Manipulationsmethoden.
expanduser
seit 0.54.0
Ein Pfad-String mit einem führenden ~ wird zum Home-Verzeichnis des Benutzers erweitert.
Beispiele
fs.expanduser('~') # user home directory
fs.expanduser('~/foo') # <homedir>/foo
as_posix
seit 0.54.0
fs.as_posix(path) nimmt einen Windows-Pfad an, auch wenn er auf einem Unix-ähnlichen System ausgeführt wird. Daher werden alle '\' oder '\\' zu '/', auch wenn Sie ein Zeichen maskieren wollten.
Beispiele
fs.as_posix('\\') == '/' # true
fs.as_posix('\\\\') == '/' # true
fs.as_posix('foo\\bar/baz') == 'foo/bar/baz' # true
replace_suffix
Die Methode replace_suffix ist eine *String-Manipulations*methode zur praktischen Dateinamenänderung. Sie ermöglicht das Ändern der Dateinamen-Endung wie
Suffix tauschen
original = '/opt/foo.ini'
new = fs.replace_suffix(original, '.txt') # /opt/foo.txt
Suffix hinzufügen
original = '/opt/foo'
new = fs.replace_suffix(original, '.txt') # /opt/foo.txt
Suffix-Kombination tauschen
original = '/opt/foo.dll.a'
new = fs.replace_suffix(original, '.so') # /opt/foo.dll.so
Suffix löschen
original = '/opt/foo.dll.a'
new = fs.replace_suffix(original, '') # /opt/foo.dll
parent
Gibt das übergeordnete Verzeichnis zurück (d.h. dirname).
new = fs.parent('foo/bar') # foo
new = fs.parent('foo/bar/baz.dll') # foo/bar
name
Gibt die letzte Komponente des Pfades zurück (d.h. basename).
fs.name('foo/bar/baz.dll.a') # baz.dll.a
stem
seit 0.54.0
Gibt die letzte Komponente des Pfades zurück, wobei der letzte Teil der Endung weggelassen wird.
fs.stem('foo/bar/baz.dll') # baz
fs.stem('foo/bar/baz.dll.a') # baz.dll
read
-
read(path, encoding: 'utf-8')*(seit 0.57.0)*: gibt einen String mit dem Inhalt des angegebenenpathzurück. Wenn das Schlüsselwortargumentencodingnicht angegeben ist, wird angenommen, dass die Datei, die vonpathangegeben wird, UTF-8-kodiert ist. Binärdateien werden nicht unterstützt. Die angegebenen Pfade sollten relativ zumeson.current_source_dir()sein oder ein absoluter Pfad außerhalb des Build-Verzeichnisses ist akzeptiert. Wenn die vonpathangegebene Datei geändert wird, löst dies Meson aus, das Projekt neu zu konfigurieren. Wenn die vonpathangegebene Datei einfiles()Objekt ist, kann sie sich nicht auf eine erstellte Datei beziehen.
relative_to
Seit 1.3.0
Gibt einen relativen Dateipfad zurück. Falls ein relativer Pfad nicht gefunden werden konnte, wird der absolute Pfad von to zurückgegeben. Relative Pfad-Argumente werden als relativ zu meson.current_source_dir() angenommen.
Hat die folgenden positionsbezogenen Argumente
- to
str | file | custom_tgt | custom_idx | build_tgt: Endpfad - from
str | file | custom_tgt | custom_idx | build_tgt: Startpfad
gibt zurück
- einen String
copyfile
Seit 0.64.0
Kopiert eine Datei vom Quellverzeichnis in das Build-Verzeichnis während des Build-Vorgangs.
Hat die folgenden positionsbezogenen Argumente
- src
File | str: die zu kopierende Datei
Hat die folgenden optionalen Argumente
- dest
str: der Name der Ausgabedatei. Wenn nicht gesetzt, ist es der Basename des src-Arguments.
Hat die folgenden Schlüsselwortargumente
- install
bool: Ob die kopierte Datei installiert werden soll, Standard istfalse - install_dir
str: Wohin die Datei installiert werden soll - install_tag:
str: Der Installations-Tag, der diesem Ziel zugewiesen werden soll - install_mode
array[str | int]: Der Modus, mit dem die Datei installiert werden soll
gibt zurück
- ein
custom_target()Objekt
copy = fs.copyfile('input-file', 'output-file')
Die Ergebnisse der Suche sind