是否有一个球拍/方案程序返回所有用户可访问文件的名称列表(或向量)?
输出需要是应用“过滤器”的列表或向量,如下所示:
(filter pred list-of-all-files)
预期的应用程序是基于文本的、用户友好的“图书管理员”程序。
您正在寻找的相关过程是directory-list和in-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"))