Common lisp 如何使用LispWorks';具有fdf handle-*函数的快速目录文件?

Common lisp 如何使用LispWorks';具有fdf handle-*函数的快速目录文件?,common-lisp,filepath,lispworks,Common Lisp,Filepath,Lispworks,LispWorks的快速目录文件和fdf句柄-*函数似乎非常有前途。LispWorks手册中的一页说 快速目录文件提供了一种比目录更快的访问文件的方法,特别是在需要基于简单功能(如大小和访问时间)进行筛选,或者需要以比目录更复杂的方式基于名称进行筛选的情况下 我试图理解如何使用它们,但我在文档中遇到了一些不透明的地方,除了我对CommonLisp还很陌生之外 例如,我们希望使用fdf handle size获取文件的文件大小。这篇文章没有提供任何例子,正文似乎有点简练。比如说, 以下读卡器可以访

LispWorks的
快速目录文件
fdf句柄-*
函数似乎非常有前途。LispWorks手册中的一页说

快速目录文件提供了一种比目录更快的访问文件的方法,特别是在需要基于简单功能(如大小和访问时间)进行筛选,或者需要以比目录更复杂的方式基于名称进行筛选的情况下

我试图理解如何使用它们,但我在文档中遇到了一些不透明的地方,除了我对CommonLisp还很陌生之外

例如,我们希望使用
fdf handle size
获取文件的文件大小。这篇文章没有提供任何例子,正文似乎有点简练。比如说,

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

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

[等]

笔记上说

fdf句柄只能在其被传递到的回调的动态范围内使用

通过反复试验,我得出了这一点(当然错了):


如何获得
/temp/a.txt
的文件大小?更重要的是,通常如何将LispWorks的快速目录文件
fdf handle-*
函数一起使用?

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

(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路径名-其目的是处理目录中的所有文件,因此a.txt被忽略


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

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

(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路径名-其目的是处理目录中的所有文件,因此a.txt被忽略


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

在代码段中,您没有显示回调的结果,您看到的是fast directory文件的结果,它返回有结果的文件列表。打印出文件大小,看看里面有什么你是对的,我忘了在最后一个括号前添加
文件大小。我得到了
(1119 0 1662)
,这是三个文件的大小。如何只过滤一个文件?这就是处理这些函数的惯用方法吗?我真的必须通过反复尝试才能到达那里,我不确定这种方式是否合适?@DavidHodge如果你能将你的评论变成一个答案,我可以投赞成票。在你的代码片段中,你没有显示回调的结果,你看到的是fast directory文件的结果,它返回有结果的文件列表。打印出文件大小,看看里面有什么你是对的,我忘了在最后一个括号前添加
文件大小。我得到了
(1119 0 1662)
,这是三个文件的大小。如何只过滤一个文件?这就是处理这些函数的惯用方法吗?我真的必须通过反复尝试才能到达那里,我不确定这种方式是否合适?@DavidHodge如果你能把你的评论变成一个答案,我可以投赞成票。谢谢你,也谢谢你关于处理单个文件的更多细节。谢谢你,也谢谢你关于处理单个文件的更多细节。