马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
 - ;; ------------------------------------------------------------------------
- ;;; 函数名称 / function name: XD::FILENAME:DIR-ON-PATH
- ;;;
- ;;; 【功能说明 / description】
- ;;; 该函数用于检查指定的目录 (`DIR`) 是否存在于指定的路径 (`PATH`) 中。
- ;;; 它首先对目录和路径进行一些预处理(如替换斜杠方向、添加分号等),然后检查目录是否在路径中。
- ;;;
- ;;; 【参数说明 / parameters】
- ;;; DIR - 需要检查的目录路径(字符串形式)。
- ;;; PATH - 用于检查的环境路径(字符串形式),通常是以分号分隔的多个目录路径。
- ;;;
- ;;; 【局部变量 / locals】
- ;;; DIR2 - 修正后的目录路径(考虑到反斜杠的情况)。
- ;;; FLAG - 用于标识目录是否存在于路径中的标志值,返回布尔值。
- ;;;
- ;;; 【返回值 / return value】
- ;;; 返回布尔值 `T` 表示目录存在于路径中,返回 `NIL` 表示目录不在路径中。
- ;;;
- ;;; 【实现逻辑 / implementation logic】
- ;;; 1. 如果 `DIR` 和 `PATH` 都有效,执行以下操作:
- ;;; 2. 如果需要加载 ARX 库,则将路径中的斜杠(`/`)替换为反斜杠(`\`)。
- ;;; 3. 将 `DIR` 和 `PATH` 转换为大写字母(使用 `XSTRCASE`)。
- ;;; 4. 检查路径中是否包含分号,如果没有,则添加分号。
- ;;; 5. 检查目录路径的末尾是否包含反斜杠(`\`),如果没有,则为目录添加一个反斜杠。
- ;;; 6. 使用 `WCMATCH` 函数检查路径中是否包含目录,若包含则返回 `T`,否则返回 `NIL`。
- ;;;
- ;;; 【示例 / example】
- ;;; (XD::FILENAME:DIR-ON-PATH "C:\\MyFolder" "C:\\Program Files;C:\\MyFolder;C:\\Windows")
- ;;; 该调用检查 `C:\\MyFolder` 是否在给定的路径中,若在则返回 `T`,否则返回 `NIL`。
- ;;;
- ;; ------------------------------------------------------------------------
- (defun XD::FILENAME:DIR-ON-PATH (DIR PATH / DIR2 FLAG)
- ;; 如果目录和路径都有效
- (if (and DIR PATH)
- (progn
- ;; 如果需要加载 ARX 库,则将路径中的斜杠替换为反斜杠
- (if (XD::INIT:FORCE-LOAD-ARX-LIB)
- (progn
- (setq DIR (XD::STR:REPLACE "/" "\\" DIR)) ;; 替换目录中的斜杠
- (setq PATH (XD::STR:REPLACE "/" "\\" PATH)) ;; 替换路径中的斜杠
- )
- )
-
- ;; 将目录和路径转换为大写字母
- (setq DIR (XSTRCASE DIR))
- (setq PATH (XSTRCASE PATH))
-
- ;; 如果路径的开始没有分号,则添加分号
- (if (/= ";" (substr PATH 1 1))
- (progn
- (setq PATH (strcat ";" PATH)) ;; 在路径前加上分号
- )
- )
-
- ;; 如果路径的末尾没有分号,则添加分号
- (if (/= ";" (substr PATH (strlen PATH) 1))
- (progn
- (setq PATH (strcat PATH ";")) ;; 在路径后加上分号
- )
- )
-
- ;; 如果目录路径的末尾没有反斜杠,则添加反斜杠
- (if (= "\\" (substr DIR (strlen DIR)))
- (progn
- (setq DIR2 (substr DIR 1 (- (strlen DIR) 1))) ;; 去掉目录末尾的反斜杠
- )
- (progn
- (setq DIR2 (strcat DIR "\\")) ;; 在目录末尾添加反斜杠
- )
- )
-
- ;; 检查路径中是否包含目录,若包含则设置 FLAG 为 T
- (setq FLAG (or (wcmatch PATH (strcat "*;" DIR ";*"))
- (wcmatch PATH (strcat "*;" DIR2 ";*"))
- )
- )
- )
- )
-
- ;; 返回 FLAG,即检查目录是否存在于路径中
- FLAG
- )
|