You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在dolist循环中获取子目录pathname-name返回nil,如何处理?

问题原因与解决办法

原因

Common Lisp的pathname-name函数是用来获取文件的名称,而非目录的最后一级名称。uiop:subdirectories返回的目录pathname对象,会把目录层级信息存在directory字段里,name字段自然为nil。

你直接调用(pathname-name "audio/bd")能得到"bd",是因为这个字符串被解析成了文件路径(哪怕实际是目录),此时"bd"被当作文件名处理;但uiop:subdirectories返回的是标准的目录pathname,结构上和文件pathname有明确区分。

解决办法

要获取目录的最后一级名称,有两种可靠方式:

  1. 提取pathname-directory的最后一项:
(dolist (dir (uiop:subdirectories "audio"))
  (print (car (last (pathname-directory dir)))))
  1. 用UIOP自带的uiop:basename函数(专门处理路径最后部分,兼容文件和目录):
(dolist (dir (uiop:subdirectories "audio"))
  (print (uiop:basename dir)))

以上两种方式都能正确输出子目录名称,比如"aliinaMay23"、"bd"等。

内容的提问来源于stack exchange,提问作者kflak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:24:56