temelde pathnames belirtmek için iki yol vardır.
"/Users/foo/bar.text" is a valid pathname
"/Users/foo/*/foo.*" is a valid pathname with two wildcards
Bir dizeden bir yol adı nesnesi oluşturabilirsiniz:
? (pathname "/Users/bar/foo.text")
#P"/Users/bar/foo.text"
#p üstünde bir yol adı nesne (ve bir dize) oluşturulur olmasını sağlar, geri okuyunca.
? #P"/Users/bar/foo.text"
#P"/Users/bar/foo.text"
Yani, içten Common Lisp yol adı nesnelerle çalışır, ancak normal dizeleri kullanmanızı sağlar ve gerekirse onlardan yol adı nesneleri yapar.
Ortak Lisp, belirtilen tüm bileşenlerin (örneğin dizin eksik) olan bir yol adını gördüğünde, bu durumda, bileşenler içindeki değerlerin değeri olan pathname nesnesinin * DEFAULT-PATHNAME-DEFAULTS * değerini doldurur.Lisp fonksiyonlar oluşturarak yol adı
BÜTÜNLEME yol adını nesneleri kullanarak
? (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
- : Bu fonksiyonla bir yol adı (burada Clozure CL) bileşenleri bakabilirsiniz DESCRIBE işlevdir ve bileşenleri belirtmek için birkaç anahtar kelime argümanını alır.
Bazen de mevcut bir dayalı yeni bir yol adı oluşturmak için yararlıdır:
(make-pathname :name "foo" :defaults (pathname "/Users/bar/baz.text"))
Eğer DIRECTORY kullanırsanız, joker karakterler ile bir yol adı kullanmak yararlı olur. DIRECTORY daha sonra eşleşen yol adlarının bir listesini döndürecektir. DIRECTORY bir dizinin içeriğini listelemediğinden, 'DIRECTORY' adı biraz yanıltıcıdır, ancak (genellikle) joker karakterleri olan bir yol adı için eşleşen yol adlarını listeler. Joker karakterler, /foo/s*c/list*.l* gibi bileşenlerin karakter dizileriyle eşleşebilir. Ayrıca, bir hiyerarşinin/foo/gibi bir dizinin parçalarını eşleştirmek için kullanılan vahşi kart ** da vardır. /test.lisp, hangi dizinin foo ve alt dizinlerinde altındaki tüm dosyaları test.lisp eşleşir.
(directory "/Users/foo/Lisp/**/*.lisp")
Üstü '/ Users/foo/Lisp /' ve sonuçta 'lisp' dosyaların bir listesini dönmelidir altdizinleri
tek dizininin kullanımda .c dosyaları dönmek için:. DIRE o
(directory "/Users/foo/c/src/*.c")
Not CTORY, bir yol adı nesnesi listesi döndürür (dizelerin bir listesi değil).
? (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")
Yukarıda, MAKE-PATHNAME tarafından oluşturulan bir pathname nesnesi kullanılır. /Lisp/cl-http/cl-http-342/server/md5.* ile eşleşen tüm dosyaları döndürür.
Bu aynı: kısadır
(directory "/Lisp/cl-http/cl-http-342/server/md5.*")
ancak Unix yol adı sözdizimi bağlıdır.
- (dizin "yol adı") nil, (dizin döndü "pathname /*.*") bana beklenen sonuçları verdi. – Justicle
Sadece nokta içeren isimlere ihtiyacınız var mı? – Svante
Garip ha? Aslında .h ve .cpp dosyalarının peşindeyim, ancak "pathname/*" NIL değerini döndürüyor. – Justicle