는 기본적으로 경로 이름을 지정하는 방법은 두 가지가 있습니다.
"/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"
그래서 내부적으로 커먼 리스프는 경로 객체와 작동하지만, 정상적인 문자열을 사용할 수 있도록하고 필요한 경우 그들로부터 경로 객체를 만든다.
CL의이 (디렉토리가없는 예를 들어) 지정된 모든 성분을 갖는 경로를보고, 그런 다음 * variabel * 기본적 경로명 디폴트 값인 경로 객체의 구성 요소에 채운다.리습 함수를 만드는 경로가
MAKE-경로 이름을 개체를 사용하여
? (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
- : 함수와 는 경로 이름 (여기 Clozure CL)의 구성 요소를 볼 수 DESCRIBE 함수이며 구성 요소를 지정하기 위해 몇 가지 키워드 인수가 필요합니다.
때때로 또한 기존 기반으로 새 경로를 생성하는 데 유용합니다 :
(make-pathname :name "foo" :defaults (pathname "/Users/bar/baz.text"))
당신이 전화 번호부를 사용하는 경우는 와일드 카드 경로 이름을 사용하는 것이 유용합니다. DIRECTORY는 일치하는 경로 이름 목록을 리턴합니다. 'DIRECTORY'라는 이름은 디렉토리의 내용을 나열하지 않지만 와일드 카드로 경로 이름 (일반적으로)에 일치하는 경로 이름을 나열하기 때문에 약간 오도 된 것입니다. 와일드 카드는 /foo/s*c/list*.l*와 같은 구성 요소의 문자 시퀀스와 일치 할 수 있습니다./foo/**와 같은 디렉토리 계층의 일부와 일치시키는 데 사용되는 와일드 카드 **도 있습니다 /test.lisp, 이는 디렉토리 foo에와 그 하위 디렉토리 아래에있는 모든 파일을 test.lisp 일치합니다.
(directory "/Users/foo/Lisp/**/*.lisp")
위는 '/ 사용자/foo는/리스프 /'모두의 모든 'LISP'파일의 목록을 반환해야 하위 디렉토리
단일 디렉토리 사용중인 .c 인 파일을 반환하려면 다음. 다이어 그
이 (directory "/Users/foo/c/src/*.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.*과 일치하는 모든 파일을 반환합니다.
이것은 동일하다 : 짧은
(directory "/Lisp/cl-http/cl-http-342/server/md5.*")
하지만 유닉스 경로 구문에 따라 달라진다.
이 - (디렉토리 "경로 이름") NIL을, (디렉토리 반환 "pathname /*.*")는 나에게 예상 된 결과를 주었다. – Justicle
점에 이름이있는 파일 만 필요합니까? – Svante
이상한가? 나는 실제로 .h와 .cpp 파일 뒤에 있지만 "pathname/*"는 NIL을 반환합니다. – Justicle