天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 105|回复: 0

[源码] LISP非递归深度遍历文件夹查找文件

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-7-10 11:27:15 | 显示全部楼层 |阅读模式
  1. (defun $lie-chu-mu-lu-xia-suo-you-wen-jian$
  2.        (lst / fs-all ns wjs kzm f wj a)
  3.           ;列出目录下所有文件,含子级目录,所有目录下的文件
  4.   ;($lie-chu-mu-lu-xia-suo-you-wen-jian$  (list(cons "目录" "C:")(cons "扩展名" "*.dwg")))
  5.   (or (and lst
  6.      (= (type lst) 'list)
  7.      (setq kzm (cdr (assoc "扩展名" lst)))
  8.      (> (strlen kzm) 0)
  9.      (wcmatch kzm "[,`*.*,]")
  10.       )
  11.       (setq kzm "*.*")
  12.   )
  13.   (or (and lst
  14.      (= (type lst) 'list)
  15.      (setq f (cdr (assoc "目录" lst)))
  16.       )
  17.       (and lst (= (type lst) 'str) (setq f lst))
  18.   )
  19.   (and
  20. ;;;    (PROGN
  21. ;;;     (NOT  (OR (and f (wcmatch f "[A-Z]:"))
  22. ;;;        (and f (wcmatch f "[a-z]:"))
  23. ;;;    )
  24. ;;;     )        ;注释这里允许遍历整个磁盘
  25. ;;;    )
  26.     (progn
  27.       (while (and f (wcmatch f "*`\\*"))
  28.   (setq f (vl-string-subst "/" "\" f))
  29.       )
  30.       (setq fs-all nil)
  31.       (setq fs-all (cons f fs-all))
  32.       (setq fs (vl-directory-files f "*.*" -1))
  33.       (setq fs (vl-remove ".." fs))
  34.       (setq fs (vl-remove "." fs))
  35.       (setq fs (mapcar (function (lambda (a) (strcat f "/" a))) fs))
  36.       (setq fs-all (APPEND fs-all fs))
  37.       (while (AND fs (setq f (car fs)) (< (LENGTH fs-all) 10000));文件夹超过十万就不继续遍历了
  38.   (setq ns nil)
  39.   (setq ns (vl-directory-files f "*.*" -1))
  40.   (setq ns (vl-remove ".." ns))
  41.   (setq ns (vl-remove "." ns))
  42.   (setq ns (mapcar (function (lambda (a / n)
  43.              (strcat f "/" a)
  44.            )
  45.        )
  46.        ns
  47.      )
  48.   )
  49.   (SETQ fs-all (APPEND fs-all NS))
  50.   (setq fs (append fs ns))
  51.   (setq fs (cdr fs))
  52.       )
  53.     )
  54.   )
  55.   (setq wjs nil)
  56.   (while (setq a (car fs-all))
  57.     (setq wj nil)
  58.     (setq wj (vl-directory-files a kzm 1))
  59.     (setq wj (vl-remove ".." wj))
  60.     (setq wj (vl-remove "." wj))
  61.     (setq wj (mapcar (function (lambda (b) (strcat a "/" b))) wj))
  62.     (setq wjs (cons wj wjs))
  63.     (setq fs-all (cdr fs-all))
  64.   )
  65.   (setq wjs (vl-remove nil wjs))
  66.   wjs
  67. )
复制代码

 

 

 

 

[源码] LISP非递归深度遍历文件夹查找文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-10-18 15:31 , Processed in 0.236162 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表