0

LispWorks' fast-directory-fileswith fdf-handle-*functions 看起来很有前途。LispWorks 手册中对目录页面中文件的快速访问说,

fast-directory-files提供了一种比directory更快的文件访问方式,尤其是在您需要基于简单特征(例如大小和访问时间)进行过滤,或者以比directory更复杂的方式基于名称进行过滤的情况下。

我试图了解如何使用它们,但我在文档中遇到了一些不透明,事实上我对 Common Lisp 还是很陌生。

举个例子,一个人希望获取文件的文件大小,使用fdf-handle-size. 详细的手册页没有提供示例,而且文本看起来有点简洁。例如,

以下读者可以访问fdf-handle 。当在文件的完整路径上调用时,括号中命名的函数将返回相同的值:

fdf-handle-size返回文件的大小(以字节为单位)。

[ETC。]

笔记说,

fdf -handle只能在它被传递到的回调的动态范围内使用。

通过反复试验,我达到了这一点(当然是错误的):

CL-USER 1 > (let (file-size)
  (fast-directory-files "/temp/a.txt"
                        #'(lambda (path handle)
                           (push (fdf-handle-size handle) file-size))))
("save.lisp" "a.txt" "a.lisp")

如何获得文件大小/temp/a.txt?更重要的是,应该如何将 LispWorksfast-directory-filesfdf-handle-*一般函数一起使用?

4

1 回答 1

2

上面的代码片段不返回回调的输出。因此

(let (file-size)
  (fast-directory-files "/temp/a.txt"
                        #'(lambda (path handle)
                           (push (fdf-handle-size handle) file-size)))
  file-size)

将生成目录中所有文件的文件大小列表。

另请注意,fast-directory-files 接受dir-pathname - 目的是处理目录中的所有文件,因此 a.txt 被忽略。

如果您只需要单个文件的大小 - 打开它并使用文件长度(当然要注意元素大小)。

于 2019-07-08T21:51:43.230 回答