mkdir2

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