std.path
このモジュールはファイル名の構文解析に使用されます。 全ての操作は文字列に対して行われ、入出力処理は伴いません。 たとえば、path がdotを含んだディレクトリ名であった場合、 getExt() のような関数は単にファイルに対して動作するように動作します。 ディレクトリとファイルの切り分けなどを行いたい場合は、 std.file モジュール (std.file.isDir()) をまず使用します。 Authors:Walter Bright, Grzegorz Adam Hankiewicz, Thomas Kühne, Andrei Alexandrescu
- const char[1] sep;
- パス中でのディレクトリ区切り文字。
Windowsではバックスラッシュで、Linuxではスラッシュです。
- const char[1] altsep;
- sep[] の代替文字。
Windowsではスラッシュで、Linuxでは空です。
- const char[1] pathsep;
- パスとパスの区切り文字。
Windowsではセミコロンで、Linuxではコロンです。
- const char[2] linesep;
- 行区切り文字。
Windowsでは \r\n で、Linuxでは \n です。
- const(char)[1] curdir;
- 現在のディレクトリを指すパス文字列
- const(char)[2] pardir;
- 親ディレクトリを指すパス文字列
- alias fcmp;
- ファイル名の比較
Returns:
< 0 filename1 < filename2 = 0 filename1 == filename2 > 0 filename1 > filename2
- string getExt(string fullname);
- ファイルネームからパスから拡張子を取得します。
この関数は、文字列 fullname の末尾から見て最初のドットを探します。 パス区切り文字や fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
ドット文字がある場合、その右の文字列が返されます。 パス区切り文字がある場合、もしくは fullname が ドットもパス区切り文字も含まない場合、null を返します。
Throws:
Nothing.
Examples:
version(Win32) { 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" }
- string getName(string fullname);
- 拡張子抜きの名前部分を取得します。
この関数は、文字列 fullname の末尾から見て最初のドットを探します。 パス区切り文字や fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
ドット文字がある場合、その左の文字列が返されます。 パス区切り文字が先に見つかった場合、あるいは fullname が ドットもパス区切り文字も含まない場合 null を返します。
Throws:
Nothing.
Examples:
version(Win32) { 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/" }
- string getBaseName(string fullname);
- 名前部分を取得します。
この関数は、文字列 fullname の末尾から見て最初の パス区切り文字を探します。fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
パス部分を取り除いて残った 右側の文字列を返します。
Throws:
Nothing.
Examples:
version(Win32) { getBaseName(r"d:\path\foo.bat") => "foo.bat" } version(Posix) { getBaseN("/home/user.name/bar.") => "bar." }
- string getDirName(string fullname);
- ディレクトリ名の取得。
この関数は、文字列 fullname の末尾から見て最初の パス区切り文字を探します。fullname の先頭が見つかった場合、探索は終了します。 Windowsでは、ドライブ文字区切り文字 (コロン) でも探索を終了します。
Returns:
パス区切り文字が見つかった場合、その左の文字列が返されます。 それ以外の場合、fullname が返ります。
Windowsの場合は、直前にコロンがある場合、 見つかったパス区切り文字自体も返値に含まれます。
Throws:
Nothing.
Examples:
version(Win32) { getDirName(r"d:\path\foo.bat") => "d:\path" getDirName(dirname(r"d:\path\foo.bat")) => r"d:\" } version(Posix) { getDirName("/home/user") => "/home" getDirName(getDirName("/home/user")) => "" }
- string getDrive(string fullname);
- ドライブ名の取得。
この関数は fullname の先頭からコロンを検索します。
Returns:
コロンが見つかると、その左の文字列とコロンを返します。 見つからなかった場合は、null を返します。
Linux では、この関数は常に null を返します。
Throws:
Nothing.
Examples:
getDrive(r"d:\path\foo.bat") => "d:"
- string defaultExt(string filename, string ext);
- 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"
- string addExt(string filename, string ext);
- 拡張子の付け替え。
この関数は 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"
- int isabs(string path);
- path が絶対パスかどうかを判定します。
Returns:
path がルートディレクトリ(Linuxの場合)か、 ドライブ文字ないしはルートディレクトリ(Windowsの場合)から始まる場合は 非ゼロ、それ以外ならゼロが返されます。
Throws:
Nothing.
Examples:
version(Win32) { isabs(r"relative\path") => 0 isabs(r"\relative\path") => 0 isabs(r"d:\absolute") => 1 } version(Posix) { isabs("/home/user") => 1 isabs("foo") => 0 }
- string join(string p1, string p2);
- 二つのパス構成要素を p1 と p2 を結合して返します。
p1 の末尾がパス区切り文字でない場合は、 p2 との結合の前に追加されます。
Returns:
p1 ~ p2 を返します。ただし、p2 が絶対パスの場合は、 単に p2 が返されます。
Throws:
Nothing.
Examples:
version(Win32) { join(r"c:\foo", "bar") => "c:\foo\bar" join("foo", r"d:\bar") => "d:\bar" } version(Posix) { join("/foo/", "bar") => "/foo/bar" join("/foo", "/bar") => "/bar" }
- int fncharmatch(dchar c1, dchar c2);
- ファイル名文字として二つの文字がマッチするかどうかの判定。
Windows では、大文字小文字の違いを無視して比較します。Linux では、 完全マッチングが行われます。
Returns:
c1 と c2 がマッチするなら非ゼロ、それ以外ならゼロを返します。
Throws:
Nothing.
Examples:
version(Win32) { fncharmatch('a', 'b') => 0 fncharmatch('A', 'a') => 1 } version(Posix) { fncharmatch('a', 'b') => 0 fncharmatch('A', 'a') => 0 }
- int fnmatch(string filename, string pattern);
- ファイル名文字列と pattern[] がマッチするかを判断します。
パターン中の幾つかの文字(メタ文字)は特殊な意味を持ち、 エスケープすることはできません。メタ文字の一覧は:* 0文字かそれ以上の文字列 ? 任意の1文字 [chars] [ と ] の間に書かれた任意の1文字 [!chars] [! と ] の間に書かれていない任意の1文字 内部的には個々の文字の比較は fncharmatch() を呼び出して行われますので、 そちらの規則もここで使用されます。 パス区切り文字とドットも、 メタ文字によるマッチを止めないことに注意が必要です。
Returns:
pattern がマッチした場合非ゼロを、それ以外ではゼロを返します。
See Also:
fncharmatch().
Throws:
Nothing.
Examples:
version(Win32) { 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 }
- string expandTilde(string inputPath);
- パス中のチルダを展開します。
チルダの展開には、二種類あります。 ひとつは、単独のチルダや直後にパス区切り記号が続く場合。 この場合は、チルダは環境変数 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; const string RESOURCE_DIR_TEMPLATE = "~/.applicationrc"; string RESOURCE_DIR; // この文字列が main() 内で展開される int main(string[] args) { RESOURCE_DIR = expandTilde(RESOURCE_DIR_TEMPLATE); ... }
Version:
v0.143 以降で使用可能です
Authors:
Grzegorz Adam Hankiewicz, Thomas Kühne.