XD::FILENAME:DIR-ON-PATH
;; ------------------------------------------------------------------------
;;; 函数名称 / 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
)
页:
[1]