E 'possibile' stat 'un file e trovare il suo tipo di file - normale o directory?Common Lisp - come dire se un percorso indica un file normale o una directory?
risposta
Penso che ci siano diversi modi. probe-file
seguito controllando il vero nome restituito per determinare che ha un nome di directory ma non un nome di file e il tipo dovrebbe farlo. per esempio. per una directory
(pathname-name (probe-file filespec))
-> NIL
CLISP ha una funzione EXT:PROBE-DIRECTORY
, che ti dice se esiste un file ed è una directory.
Si noti che questa funzione è specifica per CLISP e non standard di elenco comune.
Sono spiacente ma GNU Common Lisp e GNU CLISP sono uguali? Sto usando GNU Common Lisp (GCL 2.6.6 su Windows) ma non ho trovato il suddetto pacchetto "ext". –
@hyper: No, GCL e CLISP sono due diverse implementazioni del linguaggio Common Lisp. Dato che hai taggato questo 'clisp', ho pensato che stavi usando quest'ultimo. – sepp2k
Rimosso il tag clisp. Grazie! –
CL-FAD ha una funzione DIRECTORY-EXISTS-P che, se usato in combinazione con PATHNAME-AS-DIRECTORY canonicalizes il percorso (impedisce fallimento quando ha consegnato una stringa come "/ percorso/dir-senza-trailing-slash") e achives quello che stai chiedendo.
(CL-FAD: DIRECTORY-PATHNAME-P (CL-FAD: PATHNAME-AS-DIRECTORY (PROBE-FILE "/ percorso/missing-slash")))
Non sembra che funzioni con GCL. Almeno GCL non è elencato sotto "Implementazioni Lisp supportate" – sepp2k
Suppongo che la buona notizia sia che, poiché GCL non ha avuto un rilascio in oltre mezzo decennio, se capisci come farlo, probabilmente non dovrai preoccupati di cambiarti presto! – Ken
Ho controllato il codice sorgente di CL-FAD - la suddetta funzione funziona solo per Allegro e LispWorks. –
Leggere il capitolo di un portable pathname library da Il libro Practical Common Lisp di Peter Seibel. È disponibile gratuitamente. Ha una funzione file-exists-p che restituirà un percorso quando il file esiste o zero se non lo fa. Il percorso restituito sarà in forma di directory se si tratta di una directory. Dà anche un'altra funzione per verificare se il percorso è effettivamente in forma di directory.
BTW tutto il libro è davvero la pena di leggere in modo da controllarlo fuori se non l'hai già.
- 1. come verificare se un file è una directory o un file normale in python?
- 2. Common Lisp: creazione di una directory
- 3. C'è un modo per dire se una risorsa del percorso di classe è un file o una directory?
- 4. Come verificare se un percorso è un file o una directory nel file batch di Windows?
- 5. common lisp - get path to file
- 6. Controlla se un fstream è un file o una directory
- 7. Come verificare se in Golang esiste un file o una directory denotata da un percorso?
- 8. Determina se un percorso all'interno di una NSString riguarda una directory o un file?
- 9. Verificare se un file o una directory in Java
- 10. Stream in Common Lisp?
- 11. Common lisp gray stream
- 12. (comporre) in Common Lisp
- 13. Association nel Common Lisp
- 14. Eliminazione di un tipo in Common Lisp
- 15. Common Lisp definizione pacchetto
- 16. Node.js verifica se il percorso è file o directory
- 17. Ottieni la directory da un percorso file o dall'URL
- 18. Controlla se l'argomento è un file o una directory
- 19. Scrittura di una macro ++ in Common Lisp
- 20. Esercizi Common Lisp/problemi
- 21. Scraping una tabella HTML in Common Lisp?
- 22. Cosa indica il prefisso/private su un percorso file iOS?
- 23. Come stampare un elenco come matrice in Common Lisp
- 24. In Common Lisp cos'è una rappresentazione stampata?
- 25. Common Lisp - Utilizzando una funzione come input per un'altra funzione
- 26. Come dire se la funzione corrente è una funzione membro normale o statica in C++ 11?
- 27. Connetti Node.js come client a un server Common Lisp
- 28. Come creare un flusso binario (non un file) in Common Lisp?
- 29. Come posso unire un elenco al di fuori di una macro in Common Lisp?
- 30. Come ridurre la dimensione di un eseguibile Clozure Common Lisp?
Mentre provavo la tua soluzione, dovevo rendermi conto che questo codice avrebbe generato un errore nel caso in cui non ci fossero file o directory 'filespec'. Suggerirei di usare un 'e' per meno codice soggetto a errori:' (e (probe-file filespec) (non (nome-percorso (probe-file filespec)))) ' – Sim
Che non funzionerà. Non è chiaro che 'PROBE-FILE' funzioni sulle directory. Non è nemmeno chiaro che 'nome-percorso 'restituisca' NIL' per le directory. Generalmente questa funzionalità non è realmente fornita da Common Lisp e la maggior parte delle implementazioni ha una funzione per questo. Le biblioteche forniscono nomi portatili ... –