あなたは、 ファイル名をディレクトリとベース・コンポーネントに分割できます:
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)の付与を行うこと)