明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3984|回复: 13

[原创]列出给定路径下所有路径名(包含子目录)或者文件名(包含子目录)

  [复制链接]
发表于 2008-3-7 22:42:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-3-7 23:00:42 编辑

;-------------------------------------------------------------------------------
; Program Name: directory.lsp
; Created By:   xshrimp (Email: xshrimp@163.com)
;               (URL: http://shlisp.ys168.com/)
; Date Created: 3-7-08
; Function:    列出给定路径下所有路径名(包含子目录)或者文件名(包含子目录)
;-------------------------------------------------------------------------------
;|函数类似vl-directory-files
语法
   (gps->directory-files  directory pattern directories)
功能
   列出给定路径下所有路径名(包含子目录)或者文件名(包含子目录)
说明
  1)参数 directory 为字符串,指定要收集文件的目录。
    若未指定该参数或参数为 nil,那么gps->directory-files 使用当前目录。
  2)参数 pattern 为字符串,包含文件名的 DOS 方式。
    如果未指定该参数或参数为 nil,gps->directory-files 假定为 "*.*"。
  3)directories 为整数型,指定返回的表中是否包含路径名。可以指定下列值之一:
    -1   仅列出目录。
     0   列出文件和目录(缺省值)。
     1   仅列出文件。
返回值:
文件和路径列表。若没有符合指定方式的文件,则返回 nil。
;测试
(gps->directory-files "D:\\xx" nil  1)
(gps->directory-files "D:\\Downloads" "*.exe" 1)
  1. (defun gps->directory-files  (directory pattern directories / allpathlst gps->get-path lst n pathlst x y)
  2. (if (null pattern)     (setq pattern "*.*"))
  3. (if (null directories) (setq directories 0))
  4. ;返回目录下的所有子目录
  5. ;(gps->get-allpath "E:\\Program Files")
  6. ;(gps->get-allpath "f:\\tu")
  7. (defun gps->get-allpath(directory pattern / allpathlst lst n pathlst x gps->get-path)
  8. (if (= (type directory) 'STR)
  9. (progn
  10. (setq directory (vl-string-right-trim  "\\/ " directory))
  11. (setq allpathlst (list directory))
  12. (defun gps->get-path (directory / lst n pathlst x)
  13. (if (and (setq lst (vl-directory-files directory nil -1));仅目录
  14.          (setq lst (vl-remove-if '(lambda (x) (or (= "." x)(= ".." x))) lst))  
  15.      )
  16.       (progn
  17.        (setq pathlst (mapcar '(lambda(x)(strcat directory "\" x) )  lst))
  18.        (setq allpathlst (append allpathlst pathlst))
  19.        (foreach n pathlst (gps->get-path n ))            
  20.       )
  21. );end if
  22. )
  23. (gps->get-path directory)
  24. allpathlst
  25. ))
  26. )
  27. ;返回目录下的所有目录及子目录的文件
  28. ;(gps->get-allfile directory pattern)
  29. ;(gps->get-allfile "D:\\Downloads" "*.exe")
  30. (defun gps->get-allfile(directory pattern / x y)
  31. (apply
  32.   'append
  33.   (mapcar
  34.     '(lambda (x)
  35.        (mapcar
  36.   '(lambda (y)
  37.      (strcat x "\" y)
  38.    )
  39.   (vl-directory-files x pattern 1);仅仅文件
  40.        )
  41.      )
  42.     (gps->get-allpath directory pattern)
  43.   )
  44. )
  45. )
  46. (cond
  47. ((= -1 directories) (if (= pattern "*.*")(gps->get-allpath directory pattern)));仅列出目录
  48. ((=  0 directories)
  49. (if (/= pattern "*.*")
  50.      (gps->get-allfile directory pattern)
  51.      
  52.       (apply
  53. 'append
  54. (list
  55.    (gps->get-allpath directory pattern)
  56.    (gps->get-allfile directory pattern)
  57. )
  58.       )
  59.       
  60. )
  61. )
  62. ((=  1 directories) (gps->get-allfile directory pattern));仅列出文件
  63. )
  64. )

评分

参与人数 1明经币 +1 收起 理由
xgr + 1 赞一个!真好需要这方面的

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-7-19 08:00:57 | 显示全部楼层
谢谢分享         
发表于 2022-9-16 12:32:38 | 显示全部楼层

都没发现这个不能用吗?下面有错误吗?

本帖最后由 Bdj 于 2022-9-16 12:34 编辑

都没发现这个不能用吗?下面有错误吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-5-9 19:40:57 | 显示全部楼层
谢谢分享  
发表于 2010-7-9 21:35:00 | 显示全部楼层
谢谢楼主,正需要这个
发表于 2010-7-10 00:03:00 | 显示全部楼层
不错不错!!!收藏了
发表于 2010-7-10 09:27:00 | 显示全部楼层

感谢楼主分享学习!

发表于 2011-12-6 17:36:17 | 显示全部楼层
感谢了。楼主。分享了
发表于 2012-4-9 12:02:17 | 显示全部楼层
谢谢,收藏了,呵呵
发表于 2012-6-14 00:52:36 | 显示全部楼层
这样的必须顶
发表于 2012-6-14 05:53:27 来自手机 | 显示全部楼层
老大的作品都很经典。
发表于 2012-6-14 06:34:00 | 显示全部楼层
谢谢,收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:44 , Processed in 0.174309 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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