Uma rotina que complementa a função VL-MKDIR:
(defun mkdir2 (path / pos lst drive f)
;limpa a string:
(while (vl-string-search "\\" path)
(setq path (vl-string-subst "/" "\\" path)))
;remove a barra do final, se ela existir:
(setq path (vl-string-right-trim "/" path))
;desmonta a string numa lista:
(while (setq pos (vl-string-search "/" path))
(setq pasta (substr path 1 pos)
lst (cons pasta lst)
path (substr path (+ 2 pos) (strlen path))))
;inicializa a busca:
(setq lst (reverse (cons path lst))
drive (car lst)
lst (cdr lst)
f (and lst f))
;entra em cada sub-pasta e verifica:
(while (and lst f)
(setq drive (strcat drive "/" (car lst))
lst (cdr lst))
(if (not (findfile drive))
(setq f (vl-mkdir drive))))
f)
Como vocês sabem a função "vl-mkdir" cria apenas uma pasta e apenas isso, mas em alguns casos, precisamos de subpastas dentro de subpastas... e para usarmos essa função precisamos de um looping que verifique a existência de cada subpasta, pois a função "vl-mkdir" falha se tentarmos criar uma pasta dentro de outra que não existe...
entao aí está, para usar:
(mkdir2 "c:/teste/temp/abobrinha/") ou
(mkdir2 "c:\\teste\\temp\\abobrinha\\"), assim é como a forma usada pelo autocad
A subrotina irá devolver T se obter sucesso, ou NIL em caso de falha
ela irá falhar apenas se você especificar um caminho que seria inválido para o windows
Nenhum comentário:
Postar um comentário