Página 1 de 2
Saber se um diretorio existe?
Enviado: 24 Fev 2006 10:18
por Bisteca
Bom dia amigos...
Gostaria de saber como faço para saber se um diretorio existe ou não.
Ah. o diretorio esta vazio (sem arquivos), ja tentei "If file..."mas nao deu certo.
E tambem algum comando para copiar arquivos sem ser pelo RUN.
Obrigado a todos
Enviado: 24 Fev 2006 10:41
por Lopes
Em meus sitemas costumo usar os seguintes processos para checar se o diretório existe:
Código: Selecionar todos
// Verifica se possui o diretorio de backup
VetDir := Directory(DIR_FIL+"*.","D")
If (nEnc := aScan(VetDir,{|x| x[1] == "BACK" .and. x[5] = "D"})) = 0
//Run("MD "+DIR_FIL+"BACK >>NUL")
MakeDir(DIR_FIL+"BACK")
EndIf
DIR_FIL no caso é uma varíavel que uso para guardar o caminho onde está o sistema.
Enviado: 24 Fev 2006 11:46
por Grings
If File(´C:\Diretorio\NUL´)
Alert(´Diretório existente...´)
Else
Alert(´Diretório não existente...´)
EndIf
diretorio
Enviado: 24 Fev 2006 14:22
por Bisteca
Obrigado a todos
Valuezaço
Enviado: 26 Fev 2006 12:30
por spereira
Eu utilizo o seguinte:
if cd("\diretorio")
? "diretório existe"
else
? "diretório não existe"
endif
Enviado: 27 Fev 2006 12:04
por Augusto
Bisteca... respondendo a sua 2a. pergunta... (cópia de arquivo)
COPY TO <nome do arquivo cópia>
[<escopo>]
[FIELDS <lista de campos>]
[FOR <condição>]
[WHILE <condição>]
[SDF/DELIMITED [WITH <delimitador>]]
O comando COPY TO duplica todo ou parte do arquivo de dados ativo (em uso) para um novo arquivo. Este comando é também o principal comando para a geração de arquivos de dados de outros formatos que não os utilizados pelo Clipper.
Através do comando COPY TO, todos os registros, incluindo aqueles marcados para deleção, são copiados para o novo arquivo, a menos que seja especificado um escopo ou condições através das clausulas FOR e WHILE, ou se o comando SET DELETED estiver ON. Se um filtro estiver ativo, através do comando SET FILTER, apenas os registros que passarem pelo filtro serão copiados para o novo arquivo.
Ou ainda...
COPY FILE <nome do arquivo origem> TO <nome do arquivo destino>
O comando COPY FILE cria uma cópia duplicata de qualquer tipo de arquivo, mesmo arquivos não pertencentes ao Clipper. Tanto o nome do arquivo origem quanto o do arquivo destino devem incluir sua extensão, a designação do acionador de discos (drive) e do diretório onde eles estão localizados, caso não seja utilizado o acionador e o diretório serão considerados o padrão.
Um arquivo de dados que estiver ativo (em uso) não poderá ser copiado através do comando COPY FILE.
Enviado: 28 Fev 2006 15:58
por ROMARIO
Caros.
Tambem precisava de fazer teste se o diretório existe. Testei o exemplo do Grings que funcionou perfeitamente. Também funciona substituindo o "\null" por "\*.*". Fiz testes inclusive com subdiretórios:
If file("C:\diretorio\subdiretorio\*.*") etc. também funciona.
O exemplo do Spereira If cd("c:\diretorio") dá erro. "cd" não é comando ou função do clipper.
Abraços
Romario
Enviado: 28 Fev 2006 18:54
por rochinha
Amiguinhos
Voce podem usar as funçòes de baixo nivel para isto:
function IsDirExist( onde )
errhandle = fcreate(onde+"\$$$.$$$")
return iif( fError()=0, .t., .f. )
...
if .not. IsDirExist( "c:\rochinha" )
? "Diretorio nao existe."
endif
...
@braços :?)
Enviado: 03 Mar 2006 08:32
por spereira
ROMARIO escreveu:Caros.
Tambem precisava de fazer teste se o diretório existe. Testei o exemplo do Grings que funcionou perfeitamente. Também funciona substituindo o "\null" por "\*.*". Fiz testes inclusive com subdiretórios:
If file("C:\diretorio\subdiretorio\*.*") etc. também funciona.
O exemplo do Spereira If cd("c:\diretorio") dá erro. "cd" não é comando ou função do clipper.
Abraços
Romario
Desculpem pois não indiquei a biblioteca que utilizo e que contém a função CD(). É a CMOUSE.LIB.
Não sei de onde vem esta biblioteca nem quem a fez, pois já existia aquí no meu trabalho. Se alguém souber por favor nos informe.
Abraços.
Makedir()
Enviado: 07 Dez 2007 12:59
por Netavin
... obrigado a todos que contribuíram para a solução do problema em questão.
Quero reforçar meu comentário em expedientes anteriores: Este Fórum é demais!!
[]´s
Netavin.
Enviado: 07 Dez 2007 13:27
por ABeltrani
Boa tarde !
Se ajudar, esta função verifica a existencia de um diretorio. Se o mesmo não existir, ela cria o diretorio. É uma função da CATools.
Código: Selecionar todos
func verdir(diretorio)
loca erro:=dirchange(diskname()+':'+diretorio)
if erro=0
dirchange('..')
elseif erro=-3
dirmake(diskname()+':'+diretorio)
else
mens('Erro inesperado.')
retu .f.
endi
retu .t.
Espero ter ajudado.
Enviado: 07 Dez 2007 13:54
por rochinha
Amiguinho
Em relação a sua função seria melhor que ela aceitasse mais um parametro onde fosse possivel indicar TRUE ou FALSE para criar ou não o diretorio caso o usuario quizesse.
Imagine que eu apenas queira saber se a mesma existe, sendo que eu quero que ele não exista, sua função irá sempre retornar TRUE.
Pense nesta função como a função FILE() se o arquivo existe, TRUE, senão FALSE. E então se decide usar as funções de criação.
Enviado: 07 Dez 2007 14:54
por gvc
O dirchange já retorna erros se não encontrar a pasta.
Só tem o efeito colateral de mudar o ponteiro para a pasta, se ela for encontrada.
Verificação garantida de determinado diretório
Enviado: 07 Dez 2007 19:12
por Pablo César
Na minha opinião o uso da DIRCHANGE seria a DIRMAKE caso queira criar a pasta quando não existir e caso exista simplesmente retorna valor maior que zero e não causará nenhuma situação que não se queira ter. Ainda mais eu acho que se há necessidade de saber se existe determinada pasta, seria justamente para armazenar algo, não é assim ?. Então por quê não garantir criando-la sempre que puder.
Alias em tempo, devo dizer que não funciona (da forma que está) os exemplos abaixo:
Código: Selecionar todos
If File("C:\XIS\NUL")
? "Diretório existente..."
Else
? "Diretório não existente..."
EndIf
e também este, como disse o colega:
Código: Selecionar todos
If File("C:\XIS\*.*")
? "Diretório existente..."
Else
? "Diretório não existente..."
EndIf
Se for para simplesmente verificar se existe e não criar a pasta, eu ficaria com o do Netavin e do Rochinha, pois este sim funciona adequadamente, desta forma:
Código: Selecionar todos
VetDir := Directory("C:\*.","D")
If aScan(VetDir,{|x| x[1] == "XIS" .and. x[5] = "D"})= 0
? "Diretório não existente..."
Else
? "Diretório existente..."
EndIf
Código: Selecionar todos
if IsDirExist( "c:\XIS" )
? "Diretorio existente."
else
? "Diretorio nao existe."
endif
function IsDirExist( onde )
errhandle = fcreate(onde+"\$$$.$$$")
if file(onde+"\$$$.$$$")
delete file(onde+"\$$$.$$$")
endif
return iif( fError()=0, .t., .f. )
Preferivelmente ficaria com o exemplo do Rochinha, pois demandaria menos ação de procedimento, imagine se é um HD onde tem muitos diretório e arquivos (haveria uma limitação com o uso do DIRECTORY).
Enviado: 07 Dez 2007 19:24
por rochinha
Amiguinho
Então ela deveria ser assim:
Código: Selecionar todos
func verdir(diretorio)
loca erro:=dirchange(diretorio)
if erro <> 0
return .f.
endif
return .t.
Ou:
Código: Selecionar todos
func verdir(diretorio,lCria)
loca erro:=dirchange(diretorio)
if erro <> 0
if lCria .and. erro = -3
dirmake(diretorio)
return .t.
endif
return .f.
endif
return .t.
Tenho pra mim que DiskName() retorna a letra do drive atual e portanto se eu necessitar verificar outra unidade as funções não funcionariam, certo?