std.path
このモジュールはファイル名の構文解析に使用されます。 全ての操作は文字列に対して行われ、入出力処理は伴いません。 たとえば、path がdotを含んだディレクトリ名であった場合、 getExt() のような関数は単にファイルに対して動作するように動作します。 ディレクトリとファイルの切り分けなどを行いたい場合は、 std.file モジュール (std.file.isDir()) をまず使用します。 Source:std/path.d
License:
Boost License 1.0 Authors:
Walter Bright, Grzegorz Adam Hankiewicz, Thomas Kühne, Andrei Alexandrescu
- パス中でのディレクトリ区切り文字。
Windowsではバックスラッシュで、Linuxではスラッシュです。
- sep[] の代替文字。
Windowsではスラッシュで、Linuxでは空です。
- パスとパスの区切り文字。
Windowsではセミコロンで、Linuxではコロンです。
- 行区切りを表す文字列
行区切り文字。 Windowsでは \r\n で、Linuxでは \n です。
- カレントディレクトリを表す文字列
- 親ディレクトリを表す文字列
- ファイル名の比較
Returns:
< 0 filename1 < filename2 = 0 filename1 == filename2 > 0 filename1 > filename2
- ファイルネームから拡張子を取得します。
この関数は、文字列 fullname の末尾から見て最初のドットを探します。 パス区切り文字や fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
ドット文字がある場合、その右の文字列が返されます。 先にパス区切り文字が見つかった場合、もしくは fullname が ドットもパス区切り文字も含まない場合、null を返します。
Throws:
Nothing.
Examples:
version(Windows) { getExt(r"d:\path\foo.bat") // "bat" getExt(r"d:\path.two\bar") // null } version(Posix) { getExt(r"/home/user.name/bar.") // "" getExt(r"d:\\path.two\\bar") // "two\\bar" getExt(r"/home/user/.resource") // "resource" }
- 拡張子抜きの名前部分を取得します。
この関数は、文字列 fullname の末尾から見て最初のドットを探します。 パス区切り文字や fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
ドット文字がある場合、その左の文字列が返されます。 先にパス区切り文字が見つかった場合、もしくは fullname が ドットもパス区切り文字も含まない場合、null を返します。
Throws:
Nothing.
Examples:
version(Windows) { getName(r"d:\path\foo.bat") => "d:\path\foo" getName(r"d:\path.two\bar") => null } version(Posix) { getName("/home/user.name/bar.") => "/home/user.name/bar" getName(r"d:\path.two\bar") => "d:\path" getName("/home/user/.resource") => "/home/user/" }
- 名前部分の取得と、
拡張子が指定されていればその部分を取り除きます。
この関数は、文字列 fullname の末尾から見て最初の パス区切り文字を探します。fullname の先頭が見つかった場合、探索は終了します。Windows では、ドライブ文字区切り文字(コロン) でも探索を終了します。この探索が終わると、 見つかった位置の右側の文字列(あるいは見つからなかった場合は fullname 全体)を取り出します。取り出した部分に拡張子 extension が含まれていた場合その拡張子を取り除き、残った文字列を返します。
Returns:
パス部分を取り除いて残った右側の文字列のうち、 もし拡張子がマッチしていればその部分を取り除いた残りを返します。
Throws:
Nothing.
Examples:
version(Windows) { basename(r"d:\path\foo.bat") => "foo.bat" basename(r"d:\path\foo", ".bat") => "foo" } version(Posix) { basename("/home/user.name/bar.") => "bar." basename("/home/user.name/bar.", ".") => "bar" }
- 互換性のために残されている basename の別名。
新しいコードでは basename を使用してください。
- ディレクトリ名の取得。
この関数は、文字列 fullname の末尾から見て最初の パス区切り文字を探します。fullname の先頭が見つかった場合、探索は終了します。Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
パス区切り文字が見つかった場合、 パス区切り文字を取り除いて、それより左の文字列が返されます。 それ以外の場合、"." が返ります。
ルートディレクトリである場合に限り、 見つかったパス区切り文字自体も返値に含まれます。
Throws:
Nothing.
Examples:version(Windows) { assert(dirname(r"d:\path\foo.bat") == r"d:\path"); assert(dirname(r"d:\path") == r"d:\"); assert(dirname("d:foo.bat") == "d:."); assert(dirname("foo.bat") == "."); } version(Posix) { assert(dirname("/home/user") == "/home"); assert(dirname("/home") == "/"); assert(dirname("user") == "."); }
- 互換性のために残されている dirname の別名です。
新しいコードでは dirname を使用してください。
- ドライブ名の取得。
この関数は fullname の先頭からコロンを検索します。
Returns:
コロンが見つかると、その左の文字列とコロンを返します。 見つからなかった場合は、null を返します。
Linux では、この関数は常に null を返します。
Throws:
Nothing.
Examples:
getDrive(r"d:\path\foo.bat") => "d:"
- fullname に拡張子がなかった場合、ext を付け加えます。
この関数は filename の中から拡張子部分を探し、 なければ ext を付け加えます。ext には先頭にドットを含める必要はなく、 挿入時に filename と ext の間に 関数側でドットが追加されます
Returns:
拡張子があれば filename、なければ filename + ext を返します
Throws:
Nothing.
Examples:
defaultExt("foo.txt", "raw") => "foo.txt" defaultExt("foo.", "raw") => "foo.raw" defaultExt("bar", "raw") => "bar.raw"
- 拡張子の付け替え
この関数は filename の中から拡張子を探し、見つかった場合は ext に置き換えます。拡張子が無かった場合は、ext が追加されます。ext には先頭にドットを含める必要はなく、 挿入時に filename と ext の間に 関数側でドットが追加されます
Returns:
filename が拡張子なしなら filename + ext を、 拡張子ありなら filename の拡張子を除いたものに ext を付け加えた 結果を返します。
Throws:
Nothing.
Examples:
addExt("foo.txt", "raw") => "foo.raw" addExt("foo.", "raw") => "foo.raw" addExt("bar", "raw") => "bar.raw"
- path が絶対パスかどうかを判定します。
Returns:
path がルートディレクトリ(Linuxの場合)か、 ドライブ文字ないしはルートディレクトリ(Windowsの場合)から始まる場合は 非ゼロ、それ以外ならゼロが返されます。
Throws:
Nothing.
Examples:
version(Windows) { isabs(r"relative\path") => 0 isabs(r"\relative\path") => 0 isabs(r"d:\absolute") => 1 } version(Posix) { isabs("/home/user") => 1 isabs("foo") => 0 }
- 相対パスを絶対パスに変換します。
- 二つ以上のパス構成要素を結合
p1 の末尾がパス区切り文字でない場合は、 p2 との結合の前に区切り文字が追加されます。
Returns:
p1 ~ p2 を返します。ただし、p2 が絶対パスの場合は、 単に p2 が返されます。
Throws:
Nothing.
Examples:
version(Windows) { join(r"c:\foo", "bar") => r"c:\foo\bar" join("foo", r"d:\bar") => r"d:\bar" } version(Posix) { join("/foo/", "bar") => "/foo/bar" join("/foo", "/bar") => "/bar" }
- ファイル名文字として二つの文字がマッチするかどうかの判定。
Windows では、大文字小文字の違いを無視して比較します。Linux では、 完全マッチングが行われます。
Returns:
c1 と c2 がマッチするなら非ゼロ、それ以外ならゼロを返します。
Throws:
Nothing.
Examples:
version(Windows) { fncharmatch('a', 'b') => 0 fncharmatch('A', 'a') => 1 } version(Posix) { fncharmatch('a', 'b') => 0 fncharmatch('A', 'a') => 0 }
- ファイル名文字列と pattern がマッチするかを判断します。
パターン中の幾つかの文字(メタ文字)は特殊な意味を持ち、 エスケープすることはできません。メタ文字の一覧は:* 0文字かそれ以上の文字列 ? 任意の1文字 [chars] [ と ] の間に書かれた任意の1文字 [!chars] [! と ] の間に書かれていない任意の1文字 内部的には個々の文字の比較は fncharmatch() を呼び出して行われますので、 そちらの規則もここで使用されます。 パス区切り文字とドットも、 メタ文字によるマッチを止めないことに注意が必要です。
Returns:
pattern がマッチした場合非ゼロを、それ以外ではゼロを返します。
See Also:
fncharmatch().
Throws:
Nothing.
Examples:
version(Windows) { fnmatch("foo.bar", "*") => 1 fnmatch(r"foo/foo\bar", "f*b*r") => 1 fnmatch("foo.bar", "f?bar") => 0 fnmatch("Goo.bar", "[fg]???bar") => 1 fnmatch(r"d:\foo\bar", "d*foo?bar") => 1 } version(Posix) { fnmatch("Go*.bar", "[fg]???bar") => 0 fnmatch("/foo*home/bar", "?foo*bar") => 1 fnmatch("foobar", "foo?bar") => 1 }
- パス中のチルダを展開します。
チルダの展開には、二種類あります。 ひとつは、単独のチルダや直後にパス区切り記号が続く場合。 この場合は、チルダは環境変数 HOME へと展開されます。 もうひとつは、チルダの後にユーザー名が続く場合です (例えば ~john/Mail)。この場合は、 ユーザー名がユーザーデータベース(例えばUnixでの/etc/passwd) から検索され、そこに指定されたパスへと展開されます。 チルダの直後から 次のパス区切り記号までの文字列を、 ユーザー名として扱います。
環境変数に指定された値とユーザーデータベースに格納された値が異なる場合、 ~user 構文と単なる ~ は、 違う値を返す可能性があることに注意してください。
環境変数バージョンが使われる場合、 環境変数が存在しないか空ならばパスは置き換えられません。 データベースバージョンが使われる場合、 ユーザーが存在しない時やクエリに必要なメモリが不足しているときは、 パスは置き換えられません。
Returns:
inputPath のチルダを展開したもの、もしくは、 展開できなかった場合 inputPath をそのまま返します。 Windows環境では、expandTilde() は単に引数 inputPath を返します。
Throws:
~user 構文のデータベース検索に必要なメモリが確保できなかった場合、 std.outofmemory.OutOfMemoryException 例外が投げられます。
Examples:
import std.path; void process_file(string filename) { string path = expandTilde(filename); ... }
import std.path; string RESOURCE_DIR_TEMPLATE = "~/.applicationrc"; string RESOURCE_DIR; // この文字列が main() 内で展開される int main(string[] args) { RESOURCE_DIR = expandTilde(RESOURCE_DIR_TEMPLATE); ... }
Version:
Available since v0.143.
Authors:
Grzegorz Adam Hankiewicz, Thomas Kühne.