Có thể 'stat' một tệp và tìm loại tệp của nó - thông thường hoặc thư mục không?Common Lisp - làm thế nào để nói nếu một pathname trỏ đến một tập tin thông thường hoặc một thư mục?
Common Lisp - làm thế nào để nói nếu một pathname trỏ đến một tập tin thông thường hoặc một thư mục?
Trả lời
Tôi nghĩ có một số cách. probe-file
theo sau bằng cách kiểm tra tên thật đã trả về để xác định rằng nó có tên thư mục nhưng không phải tên tệp và loại sẽ làm. ví dụ. cho một thư mục
(pathname-name (probe-file filespec))
-> NIL
CLISP có chức năng EXT:PROBE-DIRECTORY
, cho bạn biết tệp có tồn tại hay không và là một thư mục.
Lưu ý rằng chức năng này dành riêng cho CLISP và không phải là danh sách chung tiêu chuẩn.
Xin lỗi nhưng GNU GNU Lisp và GNU CLISP giống nhau không? Tôi đang sử dụng GNU Common Lisp (GCL 2.6.6 trên Windows) nhưng tôi không thể tìm thấy gói nói "ext". –
@hyper: Không, GCL và CLISP là hai cách triển khai khác nhau của ngôn ngữ Lisp chung. Vì bạn đã gắn thẻ 'clisp' này, tôi cho rằng bạn đang sử dụng thứ hai. – sepp2k
Đã xóa thẻ clisp. Cảm ơn! –
CL-FAD có chức năng DIRECTORY-EXISTS-P, khi được sử dụng kết hợp với PATHNAME-AS-DIRECTORY canonicalizes tên đường dẫn (ngăn chặn thất bại khi giao một chuỗi như "/ path/dir-without-trailing-slash") và đạt được những gì bạn đang yêu cầu.
(CL-FAD: DIRECTORY-TÊN_ĐƯỜNG_DẪN-P (CL-FAD: TÊN_ĐƯỜNG_DẪN-AS-DIRECTORY (PROBE-FILE "/ path/missing-slash")))
Có vẻ như điều này sẽ không hoạt động với GCL. Ít nhất GCL không được liệt kê trong "Triển khai Lisp được hỗ trợ" – sepp2k
Tôi đoán tin tốt là vì GCL chưa có bản phát hành trong hơn nửa thập kỷ, nếu bạn tìm ra cách thực hiện ở đó, có thể bạn sẽ không phải lo lắng về nó thay đổi trên bạn bất cứ lúc nào sớm! – Ken
Tôi đã kiểm tra mã nguồn của CL-FAD - chức năng này chỉ hoạt động với Allegro và LispWorks. –
đọc chương về một portable pathname library từ Cuốn sách Practical Common Lisp của Peter Seibel. Nó có sẵn miễn phí. Nó có một tập tin chức năng tồn tại-p sẽ trả về một tên đường dẫn khi tập tin tồn tại hoặc không nếu nó không. Đường dẫn trả về sẽ ở dạng thư mục nếu đó là một thư mục. Ông cũng đưa ra một chức năng khác để kiểm tra xem tên đường dẫn có thực sự ở dạng thư mục hay không.
BTW toàn bộ cuốn sách thực sự đáng đọc để kiểm tra xem bạn có chưa đọc hay không.
- 1. Common Lisp: tạo một thư mục
- 2. Kiểm tra nếu một tên tập tin là một thư mục hoặc một tập tin
- 3. Làm thế nào để khởi tạo một chuỗi với một con trỏ điền vào Common Lisp?
- 4. Làm cách nào để lặp qua một thư mục trong Common Lisp?
- 5. AppleScript: Làm thế nào để kiểm tra xem một cái gì đó là một thư mục hoặc một tập tin
- 6. Làm thế nào để kiểm tra nếu một đường dẫn là một tập tin hoặc thư mục trong tập tin thực thi Windows?
- 7. Làm thế nào thường python tuôn ra một tập tin?
- 8. clojure làm thế nào để biết đường dẫn của một thư mục/tập tin/thư mục trong một dự án?
- 9. Làm thế nào để thiết lập thư mục làm việc của một lệnh trong một tập tin batch Windows?
- 10. Cạo một bảng HTML trong Common Lisp?
- 11. tập Common Lisp/Vấn đề
- 12. Làm thế nào để biết một tập tin là một EXE hoặc một DLL?
- 13. Làm thế nào để nói với trình duyệt tập tin TM2 không hiển thị một số thư mục
- 14. Làm thế nào để tìm ra nếu một tập tin là một liên kết?
- 15. Kiểm tra nếu một tập tin hoặc thư mục tồn tại trong Java
- 16. Có một lint cho Common Lisp hoặc Chicken Scheme không?
- 17. Golang Xác định xem * Tập tin trỏ vào tập tin hoặc thư mục
- 18. in rsync "bỏ qua tập tin không thường xuyên" cho những gì dường như là một thư mục thông thường
- 19. Luồng trong Common Lisp?
- 20. Android Làm thế nào để kiểm tra số lượng tập tin trong một thư mục
- 21. Làm thế nào để git commit một tập tin/thư mục
- 22. Làm thế nào để mở một tập tin trong java
- 23. Làm thế nào để dỡ bỏ một tập tin lisp trong CLisp REPL?
- 24. Làm thế nào để biết nếu Mảng FileInfo [] chứa một tập tin
- 25. linux làm thế nào để thêm một tập tin vào một thư mục cụ thể bên trong một file zip
- 26. Làm thế nào để thêm một cột từ một tập tin vào một tập tin
- 27. Làm thế nào để giảm kích thước của một Clozure Common Lisp thực thi?
- 28. Làm thế nào để tải tất cả các tập tin trong một thư mục với XNA?
- 29. Bình: Làm thế nào để đọc một tập tin trong thư mục gốc của ứng dụng?
- 30. Java sao chép một thư mục không bao gồm một số tập tin nội bộ
Trong khi thử giải pháp của bạn, tôi đã nhận ra rằng mã này sẽ dẫn đến lỗi trong trường hợp không có tệp hoặc thư mục 'filespec'. Tôi muốn đề nghị sử dụng một 'và' cho ít dễ bị lỗi mã:' (và (probe-file filespec) (không (tên đường dẫn-tên (thăm dò-file filespec)))) ' – Sim
Điều đó sẽ không hoạt động. Nó không rõ ràng rằng 'PROBE-FILE' hoạt động trên các thư mục. Nó cũng không rõ ràng rằng 'pathname-name' trả về' NIL' cho các thư mục. Nói chung chức năng này là không thực sự được cung cấp bởi Common Lisp và hầu hết các triển khai có một chức năng cho điều đó. Thư viện cung cấp tên di động ... –