は、基本的には、パス名を指定するには、2つの方法があります。
"/Users/foo/bar.text" is a valid pathname
"/Users/foo/*/foo.*" is a valid pathname with two wildcards
あなたは、文字列からパス名オブジェクトを作成することができます。
? (pathname "/Users/bar/foo.text")
#P"/Users/bar/foo.text"
上記#Pは、あなたがそれを読み戻す時にパス名オブジェクト(とない文字列)が、作成されることを保証します。
? #P"/Users/bar/foo.text"
#P"/Users/bar/foo.text"
ので、内部Common Lispはパス名オブジェクトで動作しますが、それはあなたが通常の文字列を使用することができますし、必要であれば、そこからパス名のオブジェクトになります。
Common Lispは、すべてのコンポーネントが指定されていない(たとえば、ディレクトリがない)パス名を認識すると、pathnameオブジェクトからvariabel * DEFAULT-PATHNAME-DEFAULTS *の値であるコンポーネントを埋め込みます。機能付き
(ここではClozure CL)あなたは、パス名の構成を見ることができますについて説明します。パス名を作成するLisp関数を使用して
? (describe (pathname "/Users/bar/*.text"))
#P"/Users/bar/*.text"
Type: PATHNAME
Class: #<BUILT-IN-CLASS PATHNAME>
TYPE: (PATHNAME . #<CCL::CLASS-WRAPPER PATHNAME #x3000401D03BD>)
%PATHNAME-DIRECTORY: (:ABSOLUTE "Users" "bar")
%PATHNAME-NAME: :WILD
%PATHNAME-TYPE: "text"
%PHYSICAL-PATHNAME-VERSION: :NEWEST
%PHYSICAL-PATHNAME-DEVICE: NIL
MAKE-PATHNAMEオブジェクト関数であり、コンポーネントを指定するためにいくつかのキーワード引数が必要です。
時には既存のものに基づいて新しいパス名を作成することも有用です:
(make-pathname :name "foo" :defaults (pathname "/Users/bar/baz.text"))
ディレクトリを使用する場合は、ワイルドカードでパス名を使用することが有用です。 DIRECTORYは、一致するパス名のリストを返します。 'DIRECTORY'という名前は、DIRECTORYがディレクトリの内容をリストするのではなく、(通常)ワイルドカードを持つパス名の一致するパス名をリストするので、やや誤解を招きます。ワイルドカードは/foo/s*c/list*.l* "のようなコンポーネント内の一連の文字と一致することができます。/ foo/**のようなディレクトリ階層の部分と一致するために使用されるワイルドカード**もあります上記は「/ユーザ/ fooの/ Lispの/」にし、すべてのすべての「lispの」ファイルのリストを返す必要があり、ディレクトリfooとそのサブディレクトリの下にあるすべてのファイルをtest.lisp一致した。
(directory "/Users/foo/Lisp/**/*.lisp")
/test.lisp、 。DIREこと
(directory "/Users/foo/c/src/*.c")
注:そのサブディレクトリは
単一のディレクトリ使用中の.cファイルを戻すにはCTORYはパス名オブジェクトのリストを返します(文字列のリストではありません)。
? (directory (make-pathname
:name "md5"
:type :wild
:directory '(:absolute "Lisp" "cl-http" "cl-http-342" "server")))
(#P"/Lisp/cl-http/cl-http-342/server/md5.lisp"
#P"/Lisp/cl-http/cl-http-342/server/md5.xfasl")
上記では、MAKE-PATHNAMEによって作成されたパス名オブジェクトを使用しています。 /Lisp/cl-http/cl-http-342/server/md5.*に一致するすべてのファイルを返します。短いですが、Unixのパス名の構文に依存する
(directory "/Lisp/cl-http/cl-http-342/server/md5.*")
:
これは同じです。
うんは、私のために働いた - (ディレクトリ "パス名")(ディレクトリNILを、返さ"pathname /*.*")私に期待される結果が得られました。 – Justicle
ドットを含む名前のファイルのみが必要ですか? – Svante
変わった?私は実際には.hと.cppファイルの後ですが、 "pathname/*"はNILを返します。 – Justicle