Về cơ bản có hai cách để xác định tên đường dẫn:
Strings rõ ràng là phụ thuộc vào nền tảng này: cú pháp Unix và Windows cú pháp ví dụ.
"/Users/foo/bar.text" is a valid pathname
"/Users/foo/*/foo.*" is a valid pathname with two wildcards
Bạn có thể tạo một đối tượng tên đường dẫn từ một chuỗi:
? (pathname "/Users/bar/foo.text")
#P"/Users/bar/foo.text"
CáC#p trên đảm bảo rằng một đối tượng tên đường dẫn (và không phải là một chuỗi) được tạo ra, khi bạn đọc nó trở lại.
? #P"/Users/bar/foo.text"
#P"/Users/bar/foo.text"
Vì vậy, nội bộ Lisp thường làm việc với các đối tượng đường dẫn, nhưng nó cho phép bạn sử dụng các chuỗi bình thường và tạo các đối tượng đường dẫn từ chúng nếu cần.
Khi Lisp thường thấy tên đường dẫn không có tất cả thành phần được chỉ định (ví dụ thư mục bị thiếu), thì nó sẽ điền vào các thành phần từ đối tượng đường dẫn là giá trị của variabel * DEFAULT-PATHNAME-DEFAULTS *.
Với chức năng MÔ TẢ bạn có thể nhìn vào các thành phần của một tên đường dẫn (ở đây Clozure CL):
? (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
- sử dụng tên đường dẫn chức năng Lisp tạo các đối tượng
MAKE-TÊN_ĐƯỜNG_DẪN là hàm và phải mất một vài đối số từ khóa để chỉ định các thành phần.
Đôi khi nó cũng rất hữu ích để tạo ra một đường dẫn mới dựa trên hiện có:
(make-pathname :name "foo" :defaults (pathname "/Users/bar/baz.text"))
Nếu bạn sử dụng MỤC nó rất hữu ích để sử dụng một tên đường dẫn với các kí hiệu. DIRECTORY sau đó sẽ trả về một danh sách các tên đường dẫn phù hợp. Tên 'DIRECTORY' hơi gây hiểu nhầm, vì DIRECTORY không liệt kê nội dung của một thư mục, nhưng liệt kê các tên đường dẫn phù hợp cho (thường) một tên đường dẫn với các ký tự đại diện. Các ký tự đại diện có thể khớp với chuỗi ký tự trong các thành phần như /foo/s*c/list*.l* ". Ngoài ra còn có thẻ hoang dã **, được sử dụng để khớp các phần của thư mục hierachy như/foo/** /test.lisp, mà phù hợp với tất cả các file test.lisp dưới foo thư mục và thư mục con của nó.
(directory "/Users/foo/Lisp/**/*.lisp")
trên nên trả về một danh sách tất cả 'ngọng' tập tin trong '/ Users/foo/Lisp /' và tất cả thư mục con của nó
Để trả lại hồ sơ .c trong việc sử dụng thư mục duy nhất:.
(directory "/Users/foo/c/src/*.c")
Lưu ý rằng thảm khốc CTORY trả về một danh sách các đối tượng đường dẫn (không phải là danh sách các chuỗi).
? (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")
Sử dụng trên một đối tượng đường dẫn được tạo bởi MAKE-PATHNAME. Nó trả về tất cả các tệp phù hợp với /Lisp/cl-http/cl-http-342/server/md5.*.
Đây là giống như:
(directory "/Lisp/cl-http/cl-http-342/server/md5.*")
đó là ngắn hơn, nhưng phụ thuộc vào cú pháp tên đường dẫn Unix.
Yep làm việc cho tôi - (thư mục "tên đường dẫn") trở NIL, nơi (thư mục "pathname /*.*") đã cho tôi kết quả mong đợi. – Justicle
Bạn chỉ cần các tệp có tên có dấu chấm? – Svante
Lạ à? Tôi thực sự sau các tệp .h và .cpp, nhưng "pathname/*" trả về NIL. – Justicle