首页 > 解决方案 > 方案中是否有“列出所有文件”程序?

问题描述

是否有一个球拍/方案程序返回所有用户可访问文件的名称列表(或向量)?
输出需要是应用“过滤器”的列表或向量,如下所示:

(filter pred list-of-all-files)

预期的应用程序是基于文本的、用户友好的“图书管理员”程序。

标签: listracketlibrarian

解决方案


您正在寻找的相关过程是directory-listin-directory

使用directory-list,您可以检索由某个路径指定的目录中的所有文件和目录的列表(类似于 shell 命令ls)。

;; ls /some/path
(directory-list "/some/path")

另一方面,in-directory返回一个序列,该序列为目录中的文件、目录和链接生成所有路径,递归遍历嵌套的子目录(这似乎是您主要寻找的内容)。

例如,要返回 下所有用户可读文件和目录的名称"/some/path",您可以执行以下操作:

(for/list ([f (in-directory "/some/path"
                            (lambda (p)
                              (member 'read (file-or-directory-permissions p))))])
  f)

您可以使用path->string来生成字符串格式的文件名。因此,要创建您的list-all-files程序:

(define (list-all-files path)
  (define (user-readable? f)
    (member 'read (file-or-directory-permissions f)))
  (for/list ([f (in-directory path user-readable?)])
    (path->string f)))

然后,您可以filter使用任何谓词生成列表pred

(filter pred (list-all-files "/some/path"))

推荐阅读