मूल रूप से pathnames निर्दिष्ट करने के लिए दो तरीके हैं। ,
? (pathname "/Users/bar/foo.text")
#P"/Users/bar/foo.text"
#p ऊपर भरोसा दिलाते हैं कि एक पथ वस्तु (और नहीं एक स्ट्रिंग) बनाया जाता है जब आप इसे वापस पढ़ें:
"/Users/foo/bar.text" is a valid pathname
"/Users/foo/*/foo.*" is a valid pathname with two wildcards
आप एक स्ट्रिंग से एक पथ वस्तु बना सकते हैं।
? #P"/Users/bar/foo.text"
#P"/Users/bar/foo.text"
तो, आंतरिक रूप से कॉमन लिस्प पथ नाम वस्तुओं के साथ काम करता है, लेकिन यह आप सामान्य तार का उपयोग करने देता है और यदि आवश्यक हो तो उन लोगों से पथ नाम वस्तुओं बनाता है।
कॉमन लिस्प एक पथ नाम (उदाहरण के निर्देशिका याद आ रही है के लिए) घटक निर्दिष्ट नहीं सब है कि देखता है, तो यह variabel * डिफ़ॉल्ट-पथ नाम-चूक का मूल्य है कि * पथ वस्तु से घटकों में भरता है।
समारोह के साथ
वर्णन आप एक पथ नाम (यहाँ Clozure सीएल) के घटक देखते कर सकते हैं: का उपयोग कर लिस्प कार्यों बनाने पथ नाम वस्तुओं
मेकअप पथ नाम
? (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 :name "foo" :defaults (pathname "/Users/bar/baz.text"))
आप निर्देशिका का उपयोग अगर यह वाइल्डकार्ड के साथ एक पथ नाम का उपयोग करने के लिए उपयोगी है। निर्देशिका तब मिलान पथनामों की एक सूची वापस कर देगा। 'डायरेक्टरी' नाम थोड़ा भ्रामक है, क्योंकि निर्देशिका निर्देशिका की सामग्री सूचीबद्ध नहीं करती है, लेकिन जंगलीकार्ड वाले पथनाम (आमतौर पर) के लिए मिलान करने वाले पथनाम सूचीबद्ध करती है। वाइल्डकार्ड /foo/s*c/list*.l* जैसे घटकों में वर्णों के अनुक्रमों से मेल खा सकते हैं। "वाइल्ड कार्ड ** भी है, जिसका उपयोग डायरेक्टरी जैसे भागों/foo/** के हिस्सों से मेल खाने के लिए किया जाता है। /test.lisp है, जो सभी फाइलों निर्देशिका foo और उसकी उप-के तहत test.lisp मेल खाता है।
(directory "/Users/foo/Lisp/**/*.lisp")
से ऊपर '/ उपयोगकर्ताओं/foo/लिस्प /' और सब में 'तुतलाना' फ़ाइलों की एक सूची वापस आ जाएगी उसकी उप-
एक एकल निर्देशिका उपयोग में ग फ़ाइलों लौटने के लिए:।
(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.*")
जो कम है, लेकिन यूनिक्स पथ नाम वाक्य रचना पर निर्भर करता है।
स्रोत
2009-09-10 09:12:50
हाँ मेरे लिए काम किया - (निर्देशिका "पथ") लौटे शून्य है, जहां (निर्देशिका "पथनाम /*.*") ने मुझे अपेक्षित परिणाम दिए। – Justicle
आपको केवल डॉट वाले नाम वाली फाइलों की आवश्यकता है? – Svante
अजीब हुह? मैं वास्तव में .h और .cpp फ़ाइलों के बाद हूं, लेकिन "पथनाम/*" शून्य लौटाता है। – Justicle