Next: , Previous: , Up: Files   [Contents][Index]


6.18.4 Directories

あなたは、 ファイル名をディレクトリとベース・コンポーネントに分割できます:

basename ( c-addr1 u1 – c-addr2 u2  ) gforth-0.7 “basename”

ファイル名が c-addr1 u1 の場合、 c-addr2 u2 は、 先頭のディレクトリ・コンポーネントが削除された部分です(訳注: "os-class" environment? type unix ok な環境では動いたが、 Windows系では不明(’/’ を区切り文字としてハードコーディングしてあるっぽい)。

dirname ( c-addr1 u1 – c-addr1 u2  ) gforth-0.7 “dirname”

C-addr1 u2 は、 ファイル名 c-addr1 u1 のディレクトリ名部分で、 末尾の / も含まれます。 caddr1 u1/ が含まれていない場合、 u2=0 です(訳注: pathの区切り文字として / をハードコーディングしているので、 Windows系で動くかどうか不明)。

ファイルと同様に、 ディレクトリを開いて読み取ることができます。 読むと、 一度に 1 つのディレクトリ・エントリが得られます。 これを、 (ワイルドカードを使用して)ファイル名とマッチングさせることができます。

open-dir ( c-addr u – wdirid wior ) gforth-0.5 “open-dir”

c-addr, u で指定されたディレクトリを開き、 さらにそこにアクセスするために dir-id を返します。

read-dir ( c-addr u1 wdirid – u2 flag wior ) gforth-0.5 “read-dir”

dir-id で指定されたディレクトリから、 アドレス c-addr にある長さ u1 のバッファーへ、 次のエントリの読み取りを試みます。 これ以上エントリがないために試行が失敗した場合は、 ior=0 かつ flag=0 かつ u2=0 となり、 バッファーは変更されません。 他の理由で次のエントリの読み取りに失敗した場合は、 ior<>0 を返します。 試行が成功した場合、 ファイル名を c-addr からのバッファーに保存し、 ior=0 かつ flag=true かつ ファイル名のサイズに等しい u2 を返します。 ファイル名の長さが u1 より長い場合は、 ファイル名の最初の u1 文字をバッファーに格納し、 ior はエラー "name too long" を示し(訳注: ior= -548 日本語環境では "ファイル名が長すぎます")、 かつ flag=true かつ u2=u1 です。

close-dir ( wdirid – wior ) gforth-0.5 “close-dir”

dir-id で指定されたディレクトリを閉じます。

filename-match ( c-addr1 u1 c-addr2 u2 – flag ) gforth-0.5 “match-file”

ファイル名 c_addr1 u1 とパターン c_addr2 u2 のマッチングを行います。 パターンは、複数の文字 (’*’) または 1 つの文字 (’?’) のワイルドカードである特殊文字 ’*’ と ’?’ を除き、 文字ごとにマッチします。 マッチングできた場合は true

get-dir ( c-addr1 u1 – c-addr2 u2 ) gforth-0.7 “get-dir”

c-addr1, u1で指定されたバッファーにカレント・ディレクトリのパス(path)を格納します。 バッファーサイズが十分でない場合は、 0 0 を返します。

set-dir ( c-addr u – wior ) gforth-0.7 “set-dir”

現在のディレクトリを c-addr, u に変更します。 これが不可能な場合はエラーを返します(訳注: 例えば ior = -514 ; "そのようなファイルやディレクトリはありません")

=mkdir ( c-addr u wmode – wior ) gforth-0.7 “equals-mkdir”

モード wmode でディレクトリ c-addr u を作成します。

mkdir-parents ( c-addr u mode – ior  ) gforth-0.7 “mkdir-parents”

ディレクトリ c-addr u とそのすべての親をモード mode (umask が掛けられます)で作成します(訳注: フルパスで指定したディレクトリを作成する。 aaa/bbb/ccc というディレクトリを指定すればそれを一気に作る。 ここで、 ccc というファイルが既にある場合は何もせず ior=-529 「ファイルが存在します」エラーとなる。 注意: aaa または bbb がファイルの場合は「削除」してからディレクトリを作成するので注意。 ior=-525 なら「許可がありません」(aaa , aaa/bbb , aaa/bbb/ccc のいずれで許可が無かったのかは不明)。 注意: gforth には8進数リテラルが無いので注意。 2進数(%0111111101 ; -rwxrwxr-x )がおすすめ。 ディレクトリの作成であるので実行権限(x)の付与を行うこと)


Next: Search Paths, Previous: Redirection, Up: Files   [Contents][Index]