Как использовать быстрые каталоги LispWorks с функциями fdf-handle- *? - PullRequest
0 голосов
/ 07 июля 2019

LispWorks fast-directory-files с функциями fdf-handle-* кажутся очень многообещающими. Быстрый доступ к файлам в каталоге на странице руководства LispWorks гласит:

fast-directory-files дает более быстрый способ доступа к файлам, чем directory , особенно в ситуациях, когда вам нужно фильтровать на основе простых функций, таких как размер и время доступа, или фильтровать на основе имени более сложным способом, чем directory can.

Я пытаюсь понять, как их можно использовать, но я сталкиваюсь с некоторой непрозрачностью в документации, помимо того, что я довольно новичок в Common Lisp.

Скажем, какНапример, можно получить размер файла, используя fdf-handle-size.Подробная справочная страница не содержит примеров, и текст кажется немного кратким.Например,

К fdf-handle могут получить доступ следующие читатели.Функции, названные в скобках, будут возвращать одно и то же значение при вызове по полному пути файла:

fdf-handle-size возвращает размер файла в байтах.

[и т. д.]

Примечания говорит,

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?Что еще более важно, как предполагается использовать LispWorks fast-directory-files с fdf-handle-* функциями в целом?

1 Ответ

2 голосов
/ 09 июля 2019

Приведенный выше фрагмент не возвращает результат обратного вызова.Следовательно,

(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 игнорируется.

Если вам нужен только размер одного файла - откройте его и используйте длину файла (обращая внимание на элементразмер конечно).

...