Hay básicamente dos formas de especificar los nombres de ruta:
Las cadenas son, obviamente, dependiendo de la plataforma: la sintaxis Unix frente a la sintaxis de Windows, por ejemplo.
"/Users/foo/bar.text" is a valid pathname
"/Users/foo/*/foo.*" is a valid pathname with two wildcards
Usted puede crear un objeto de ruta de una cadena:
? (pathname "/Users/bar/foo.text")
#P"/Users/bar/foo.text"
El #p anterior asegura que se crea un objeto de ruta (y no una cadena), cuando se lee de nuevo.
? #P"/Users/bar/foo.text"
#P"/Users/bar/foo.text"
Así, Lisp común internamente trabaja con objetos de nombre de ruta, pero se le permite utilizar cadenas normales y hace que los objetos de nombre de ruta de ellos si es necesario.
Cuando Common Lisp ve un nombre de ruta que no tiene todos los componentes especificados (por ejemplo, falta el directorio), rellena los componentes del objeto pathname que es el valor de variabel * DEFAULT-PATHNAME-DEFAULTS *.
Con la función describe se puede ver en los componentes de un nombre de ruta (aquí 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
- utilizando la ruta funciones Lisp crear objetos
MAKE-PATHNAME es la función y se necesitan algunos argumentos clave para especificar los componentes.
A veces también es útil para crear un nuevo nombre de ruta basada en una ya existente:
(make-pathname :name "foo" :defaults (pathname "/Users/bar/baz.text"))
Si utiliza ANUARIO es útil el uso de un nombre de ruta con comodines. DIRECTORIO luego devolverá una lista de nombres de ruta coincidentes. El nombre 'DIRECTORIO' es ligeramente engañoso, ya que DIRECTORIO no enumera el contenido de un directorio, sino que enumera los nombres de las rutas correspondientes para (normalmente) una ruta de acceso con comodines. Los comodines pueden coincidir con una secuencia de caracteres en componentes como /foo/s*c/list*.l* ". También está el comodín **, que se usa para hacer coincidir partes de una jerarquía de directorios como/foo/** /test.lisp, que coincide con todos los archivos test.lisp bajo el directorio foo y sus subdirectorios.
(directory "/Users/foo/Lisp/**/*.lisp")
anterior debe devolver una lista de todos los archivos Lisp '' en '/ Usuarios/foo/Lisp /' y todos sus subdirectorios
Para devolver los archivos .c en un solo directorio de uso:.
(directory "/Users/foo/c/src/*.c")
nota que DIRE CTORY devuelve una lista de objetos de ruta (no una lista de cadenas).
? (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")
Above utiliza un objeto de nombre de ruta creado por MAKE-PATHNAME. Devuelve todos los archivos que coinciden con /Lisp/cl-http/cl-http-342/server/md5.*.
Esto es lo mismo que:
(directory "/Lisp/cl-http/cl-http-342/server/md5.*")
que es más corto, pero depende de la sintaxis nombre de ruta Unix.
Sí funcionó para mí - (directorio "ruta") devuelve NIL, donde (directorio "nombre de ruta /*.*") me dio los resultados esperados. – Justicle
¿Solo necesita archivos con nombres que contengan un punto? – Svante
Weird eh? De hecho, estoy buscando archivos .h y .cpp, pero "pathname/*" devuelve NIL. – Justicle