listar todos os arquivos de um diretorio e seus sub diret.

Implementação de melhorias e aumento no nível de segurança.

Moderador: Moderadores

Responder
Avatar do usuário
nelmifer
Madeira
Madeira
Mensagens: 16
Registrado em: Seg 04 Mai 2009 12:00:00 am

listar todos os arquivos de um diretorio e seus sub diret.

Mensagem por nelmifer »

como faço para colocar em uma lista todos os arquivos de um diretorio e de seus subdiretorios ...
tenho a seguinte rotina:
[lsp]

(setq DIRETORIO (getfiled "Diretorio " "" "" 2))

(SETQ LISTADWG (VL-DIRECTORY-FILES DIRETORIO "*.DWG" 0))

(SETQ NN 0)
(REPEAT (LENGTH LISTADWG)
(SETQ NOME (STRCAT DIRETORIO "" (NTH NN LISTADWG)))
(PRINC NOME)(princ"\n")
(SETQ NN (+ NN 1))
)
[/lsp]

mas ela só lista o diretorio principal do getfiled ...
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

nelmifer... Utilize como base a rotina abaixo:

[lsp](defun c:lista (/ dir)
(setq dir (vl-filename-directory (getfiled "Diretorio " "" "" 2)))
(lista_ dir)
)

;Função recursiva
(defun lista_ (baseDir / listDir dir)
;lista os arquivos dwg no diretório atual
(princ "\nDiretório: ")
(princ baseDir)
(terpri)
(getstring "\nPressione enter para listar: ")
(princ (vl-directory-files baseDir "*.dwg" 1))
(terpri)
;lista de sub-diretórios
(setq listDir (vl-directory-files baseDir "*" -1))
;Remove os diretório "." e ".." da lista
(setq listDir (vl-remove "." listDir))
(setq listDir (vl-remove ".." listDir))
;loop que chama a função recursivamente para listar os sub-diretórios
(while (setq dir (car listDir))
(lista_ (strcat baseDir "\\" dir))
;remove o diretório da lista
(setq listDir (vl-remove dir listDir))
)
)[/lsp]

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com
Avatar do usuário
nelmifer
Madeira
Madeira
Mensagens: 16
Registrado em: Seg 04 Mai 2009 12:00:00 am

mais a fundo

Mensagem por nelmifer »

Aproveitando o topico acrescentei na rotina a gravação em um arquivo txt.

espero que seja util aos novatos como eu.

[lsp](DEFUN c:le-1 (/ dir)
(setq dir (vl-filename-directory (getfiled "Diretorio " "" "" 2)))
(lista_ dir)
)

;Função recursiva
(defun lista_ (baseDir / listDir dir)
;lista os arquivos dwg no diretório atual

(terpri)
(setq lista-1 (vl-directory-files baseDir "*.dwg" 1))
(setq fn (open (strcat baseDir "\\relatorio.txt") "w"))
(SETQ NN 0)
(REPEAT (LENGTH LISTA-1)
(SETQ NOME-1 (STRCAT basedir "\\" (NTH NN LISTA-1)))
; aqui é para gravar os arquivos do diretorio principal
(write-line nome-1 fn)
; neste ponto pode-se substituir por uma rotina como: purge all ou outra necessaria
(SETQ NN (+ NN 1))
)
(terpri)
;lista de sub-diretórios
(setq listDir (vl-directory-files baseDir "*" -1))
;Remove os diretório "." e ".." da lista
(setq listDir (vl-remove "." listDir))
(setq listDir (vl-remove ".." listDir))
;loop que chama a função recursivamente para listar os sub-diretórios
(while (setq dir (car listDir))
(lista_ (strcat baseDir "\\" dir))
(SETQ NOME-1 (STRCAT basedir "\\" (NTH NN lista-dir)))
; aqui é para gravar os arquivos do sub - diretorios
(write-line nome-1 fn)
; neste ponto pode-se substituir por uma rotina como: purge all ou outra necessaria

;remove o diretório da lista
(setq listDir (vl-remove dir listDir))
)

(command "close" NOME-1)
)

)
(princ "rotina le-1 Lida OK!!!!")[/lsp]
Responder