Saber se um diretorio existe?
Moderador: Moderadores
Saber se um diretorio existe?
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
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
Em meus sitemas costumo usar os seguintes processos para checar se o diretório existe:
DIR_FIL no caso é uma varíavel que uso para guardar o caminho onde está o sistema.
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
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
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.
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.
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
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
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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 :?)
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 :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
spereira
- Usuário Nível 2

- Mensagens: 85
- Registrado em: 19 Jul 2004 11:42
- Localização: Porto - Portugal
Desculpem pois não indiquei a biblioteca que utilizo e que contém a função CD(). É a CMOUSE.LIB.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
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()
... 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.
Quero reforçar meu comentário em expedientes anteriores: Este Fórum é demais!!
[]´s
Netavin.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
-
ABeltrani
- Usuário Nível 2

- Mensagens: 54
- Registrado em: 09 Nov 2007 10:05
- Localização: Porto Ferreira-SP
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.
Espero ter ajudado.
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.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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.
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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Verificação garantida de determinado diretório
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:
e também este, como disse o colega:
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:
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).
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..."
EndIfCódigo: Selecionar todos
If File("C:\XIS\*.*")
? "Diretório existente..."
Else
? "Diretório não existente..."
EndIfCó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..."
EndIfCó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).
Editado pela última vez por Pablo César em 07 Dez 2007 19:47, em um total de 2 vezes.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Então ela deveria ser assim:
Ou:
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?
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.
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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.

