¿Es posible 'stat' un archivo y encontrar su tipo de archivo regular o directorio?Common Lisp: cómo saber si un nombre de ruta apunta a un archivo normal o a un directorio.
Respuesta
Creo que hay varias maneras. probe-file
seguido de verificar el verdadero nombre devuelto para determinar que tiene un nombre de directorio pero no un nombre de archivo y el tipo debería hacerlo. p.ej. para un directorio
(pathname-name (probe-file filespec))
-> NIL
CLISP tiene una función EXT:PROBE-DIRECTORY
, que le indica si un archivo existe y es un directorio.
Tenga en cuenta que esta función es específica de CLISP y no de la lista común estándar.
Lo siento pero es GNU Common Lisp y GNU CLISP lo mismo? Estoy usando GNU Common Lisp (GCL 2.6.6 en Windows) pero no pude encontrar dicho paquete "ext". –
@hyper: No, GCL y CLISP son dos implementaciones diferentes del lenguaje Common Lisp. Desde que etiquetó este 'clisp' asumí que estaba usando el último. – sepp2k
Se ha eliminado la etiqueta clisp. ¡Gracias! –
CL-FADDIRECTORY-EXISTS-P tiene una función que, cuando se utiliza en combinación con PATHNAME-AS-DIRECTORY canonicalizes el nombre de ruta (evita el fallo cuando se entregó una cadena como "/ ruta/dir-sin-trailing-slash") y achives lo que estás pidiendo.
(CL-FAD: directorio-PATHNAME-P (CL-FAD: PATHNAME-AS-DIRECTORIO (SONDA-FILE "/ ruta/faltante-slash")))
Parece que esto no funcionará con GCL. Al menos GCL no aparece en la lista de "Implementaciones de Lisp compatibles" – sepp2k
Supongo que la buena noticia es que, como GCL no ha tenido un lanzamiento en más de media década, si descubres cómo hacerlo allí probablemente no tengas que ¡Preocúpate de que te cambie pronto! – Ken
Comprobé el código fuente de CL-FAD, dicha función solo funciona para Allegro y LispWorks. –
Leer el capítulo sobre un portable pathname library de El libro de Peter Seibel Practical Common Lisp. Está disponible de forma gratuita. Tiene una función file-exists-p que devolverá un nombre de ruta cuando el archivo exista o nulo si no lo hace. El nombre de ruta devuelto estará en forma de directorio si es un directorio. También le da otra función para verificar si la ruta de acceso está realmente en forma de directorio.
Por cierto, vale la pena leer todo el libro, así que échale un vistazo si aún no lo has hecho.
- 1. ¿Cómo puedo saber si una ruta determinada es un directorio o un archivo? (C/C++)
- 2. cómo saber si la ruta conduce a un archivo ejecutable?
- 3. cómo comprobar si un archivo es un directorio o un archivo normal en python?
- 4. Golang Determinando si * El archivo apunta a un archivo o directorio
- 5. Determinar si una ruta dentro de un NSString es a un directorio, o un archivo?
- 6. Common Lisp a Lisp-n?
- 7. Ruta a un archivo sin nombre base
- 8. ¿Cómo puedo iterar a través de un directorio en Common Lisp?
- 9. ¿Cómo se puede saber si una URL de activo realmente apunta a un activo existente?
- 10. ¿Cómo puedo verificar si un puntero apunta a NULL?
- 11. ¿Cómo puedo saber si un archivo es descendiente de un directorio determinado?
- 12. ¿Cómo incremento o disminuyo un número en Common Lisp?
- 13. Conexión de .NET a Common Lisp
- 14. ¿Cómo copiar un archivo a otra ruta?
- 15. Compruebe si una ruta representa un archivo o una carpeta
- 16. Common Lisp equivalente a C enums
- 17. Copie el archivo a un directorio diferente
- 18. Eliminación de un tipo en Common Lisp
- 19. Ant: Encuentre la ruta de un archivo en un directorio
- 20. JFileChooser - configurar el directorio a una ruta en un archivo
- 21. archivo robotexto que apunta a un mapa del sitio local
- 22. ¿Cómo comprobar si una ruta apunta a un archivo existente con la nueva API de archivos de Java 7?
- 23. ¿Cómo puedo saber a qué apunta mi enlace simbólico?
- 24. ¿Cómo saber si un archivo es un enlace?
- 25. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 26. lisp común: obtenga la ruta al archivo
- 27. ¿Cómo saber si un manejador de archivo es un socket?
- 28. Ruta a un archivo de recursos incrustado
- 29. ¿Cómo saber si existe un archivo en C#/.NET?
- 30. ¿Cómo puedo verificar si un archivo es un archivo normal en C++?
Al intentar su solución, tuve que darme cuenta de que este código generará un error en caso de que no haya ningún archivo o directorio 'filespec'. Sugiero usar un 'y' para menos código propenso a errores:' (y (probe-file especificación de archivos) (no (pathname-name (probe-file filespec)))) ' – Sim
Eso no funcionará. No está claro si 'PROBE-FILE' funciona en directorios. Tampoco está claro que 'pathname-name' devuelva' NIL' para directorios. En general, Common Lisp no proporciona realmente esta funcionalidad y la mayoría de las implementaciones tienen una función para eso. Las bibliotecas proporcionan nombres portátiles ... –