list - 方案中是否有“列出所有文件”程序?
问题描述
是否有一个球拍/方案程序返回所有用户可访问文件的名称列表(或向量)?
输出需要是应用“过滤器”的列表或向量,如下所示:
(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"))
推荐阅读
- ios - 当我尝试从 App Delegate 访问根控制器时,window.rootViewController 返回 nil
- python - 从python中的字典中删除元素
- mongodb - MongoDB数组作为字符串
- php - 我无法选择在 laravel 中有部门的用户
- python - 根据关键字转推特定用户的推文
- xml - DB2 中的 XML 解析 - 在单个 XML CLOB 字段中生成多行表达式
- java - Spring @Autowired 不工作 - 预计至少有 1 个 bean 有资格作为自动装配候选者
- macos - 在 macOS 上安装 Octave io 包
- javascript - 加载 JSON 文件时出现“Cross-Origin Request Blocked”错误
- django - Django-rest-framework 获取外键字段