我希望在restart-case
期间为用户提供有关缺少输入文件的其他信息。
是否有可移植的方式打印出当前目录中的文件?
答案 0 :(得分:3)
请查看File System Concepts,特别是directory
。
,例如,
(directory "~/*")
获取您家中的文件列表(directory "~/*/")
获取您家中的目录列表(directory "~/**/*")
获取您家中所有子目录中所有文件的列表请注意,directory
可能会采用特定于实现的参数,例如:full
。
如果您使用asdf
(您应该!),您可能需要查看随附的uiop
。
PS。如果您的实现不支持路径名中的~
来引用主目录,则可以使用user-homedir-pathname
代替。
答案 1 :(得分:1)
对uiop的引用是我需要的提示。这就是我现在在我的测试用例中使用的,它对我来说非常有用:
(defun file-is-missing ()
(let* ((cwd (uiop:getcwd))
(files (uiop:directory-files cwd)))
(format t "~&Current directory: ~a~%" cwd)
(dolist (file files)
(format t "~&~3T~a" file))
(format t "~&Provide new file: ")
(list (read-line))))
(defun read-file (file)
(restart-case
(with-open-file (s file :direction :input :if-does-not-exist :error)
(do ((l (read-line s) (read-line s nil 'eof)))
((eq l 'eof) "Reached end of file.")
(format t "~&*** ~A~%" l)))
(New-File (filename)
:interactive file-is-missing
(read-file filename))))