comando File falhando para ver se arquivo existe
Moderador: Moderadores
comando File falhando para ver se arquivo existe
olá pessoal, no comando abaixo, está acontecendo de não localizar o ATUALIZA.EXE, o arquivo está nesta pasta, mas não executa a rotina
porque não encontra o atualiza.exe, já aconteceu isso com alguem, existe um comando mais eficaz para verificar se o arquivo existe ?
If File("C:\ESTOQUE\ATUALIZA.EXE")
! del loja.old
! ren loja.exe *.old
! ren atualiza.exe loja.exe
MENSAGEM("Atualizado !")
endif
xHarbour, obrigado.
porque não encontra o atualiza.exe, já aconteceu isso com alguem, existe um comando mais eficaz para verificar se o arquivo existe ?
If File("C:\ESTOQUE\ATUALIZA.EXE")
! del loja.old
! ren loja.exe *.old
! ren atualiza.exe loja.exe
MENSAGEM("Atualizado !")
endif
xHarbour, obrigado.
comando File falhando para ver se arquivo existe
Ja tentou com hb_FileExists??
Nao sei se tem essa função no xHarbour...
Nao sei se tem essa função no xHarbour...
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
comando File falhando para ver se arquivo existe
Ou porque o arquivo loja.exe está em execução.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
comando File falhando para ver se arquivo existe
Código: Selecionar todos
// Modificado por Joao Santos em: 23/11/2016 - kapiabafwh@gmail.com
#include "FiveWin.ch" // retire a chamada ao Fivewin se modo console.
#Include "set.ch"
FUNCTION Main()
LOCAL nArquivo, cArquivo := "TESTE.TXT", lCacheSyst := NIL
nArquivo := FileExist( cArquivo, lCacheSyst )
IF nArquivo // .T.
? [Arquivo existe ], nArquivo
ELSE // .F.
? [Arquiv nao existe ], nArquivo
ENDIF
RETURN NIL
FUNCTION FileExist( cArquivo, lCacheSyst )
* Auteur Badara Thiam - Ideia original.
LOCAL nAttributs
LOCAL nCount := 1
LOCAL X
LOCAL cSepare := ""
IF "\" $ cArquivo
ELSEIF !EMPTY( SET(_SET_DEFAULT) )
* Recherche dans le répertoire par défaut de clipper (SET DEFAULT TO)
cArquivo := TRIM(SET(_SET_DEFAULT)) + "\" + cArquivo
ELSEIF !EMPTY( SET(_SET_PATH) )
* Recherche dans le(s) répertoire(s) du path de clipper (SET PATH TO)
nCount := LEN( SET(_SET_PATH) ) - LEN( STRTRAN(SET(_SET_PATH),",","") ) + 1
IF nCount = 1
nCount := LEN( SET(_SET_PATH) ) - LEN( STRTRAN(SET(_SET_PATH),";","") ) + 1
IF nCount = 1
cArquivo := TRIM(SET(_SET_PATH)) + "\" + cArquivo
ELSE
cSepare := ";"
ENDIF
ELSE
cSepare := ","
ENDIF
ENDIF
FOR X := 1 TO nCount
IF nCount = 1
* With Windows apps
nAttributs := GetFileAttributes(cArquivo)
* Or with Clipper DOS apps via Clipper Tools
* nAttributs := FileAttr(cArquivo)
ELSE
* With Windows apps
nAttributs := GetFileAttributes( ALLTRIM( TOKEN(SET(_SET_PATH), cSepare, nCount) ) ;
+ "\" + cArquivo)
* Or with Clipper DOS apps via Clipper Tools
* nAttributs := FileAttr( ALLTRIM( TOKEN(SET(_SET_PATH), cSepare, nCount) ) ;
* + "\" + cArquivo)
ENDIF
IF ( nAttributs >= 0 .AND. ( nAttributs % 32 ) < IIF(EMPTY(lCacheSyst), 2, 8) )
RETURN .T.
ENDIF
NEXT X
RETURN .F.
*******************
DLL32 FUNCTION GetFileAttributes( lpszSearchFile AS STRING ) AS DWORD ;
PASCAL FROM "GetFileAttributesA" LIB "KERNEL32.DLL"
// FIM DO PROGRAMA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
comando File falhando para ver se arquivo existe
Pra otimizar a rede, o Windows economiza consultas.
Se esse arquivo não estava lá antes, a nova consulta vai dizer que não está.
Tem umas configurações no Windows pra evitar isso.
Não sei dizer quais são, mas fazem parte de uma função do Harbour que já configura tudo do Windows de uma vez.
Algo como o diretório ficar em cache, e não ser atualizado.
Nota: isso se o arquivo é "novo" na pasta.
Se esse arquivo não estava lá antes, a nova consulta vai dizer que não está.
Tem umas configurações no Windows pra evitar isso.
Não sei dizer quais são, mas fazem parte de uma função do Harbour que já configura tudo do Windows de uma vez.
Algo como o diretório ficar em cache, e não ser atualizado.
Nota: isso se o arquivo é "novo" na pasta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
comando File falhando para ver se arquivo existe
Não tenho permissão de ESCRITA na pasta "c:\Windows"
Pq os comandos
hb_FileExists("c:\Windows\CriaSoft.ini")
e
File("c:\Windows\CriaSoft.ini")
sempre retornam VERDADEIRO mesmo que o arquivo NÃO EXISTA?
Os comandos acima SOMENTE retornam a INFORMAÇÃO CORRETA, se o arquivo de fato existe ou não, se eu EXECUTAR O SISTEMA COMO ADMINISTRADOR!
Alguma solução para isso?
Pq os comandos
hb_FileExists("c:\Windows\CriaSoft.ini")
e
File("c:\Windows\CriaSoft.ini")
sempre retornam VERDADEIRO mesmo que o arquivo NÃO EXISTA?
Os comandos acima SOMENTE retornam a INFORMAÇÃO CORRETA, se o arquivo de fato existe ou não, se eu EXECUTAR O SISTEMA COMO ADMINISTRADOR!
Alguma solução para isso?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
comando File falhando para ver se arquivo existe
Oi Janio,
E se tentar com hb_FGetAttr(<cFileName>, @<nAttr>) -> lSuccess
Colocando como atributo: "S", "H" ou "R" ?
Melhor dito: talvez nem precise atributo algum...
Mas um pergunta Janio. O arquivo INI você pretende alterar lá no Windows ? ummm ai acho dificil pela questão de direitos e privilégios do usuário... agora se for só para saber, acho que tem jeito sim.
E se tentar com hb_FGetAttr(<cFileName>, @<nAttr>) -> lSuccess
Colocando como atributo: "S", "H" ou "R" ?
Melhor dito: talvez nem precise atributo algum...
Mas um pergunta Janio. O arquivo INI você pretende alterar lá no Windows ? ummm ai acho dificil pela questão de direitos e privilégios do usuário... agora se for só para saber, acho que tem jeito sim.
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.
comando File falhando para ver se arquivo existe
Preciso apenas saber se o arquivo existe!
Ocorre que SEM PRIVILEGIO DE ADMINISTRADOR, as funções SEMPRE retornam VERDADEIRO mesmo que o arquivo NAO EXISTA!
Janio
Ocorre que SEM PRIVILEGIO DE ADMINISTRADOR, as funções SEMPRE retornam VERDADEIRO mesmo que o arquivo NAO EXISTA!
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
comando File falhando para ver se arquivo existe
Tá bem... mas não se irrite (dizia o Chaves pro Kiko...Janio escreveu:Preciso apenas saber se o arquivo existe!
Eu testei como "convidado" e deu certo com hb_FGetAttr(<cFileName>)
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.
comando File falhando para ver se arquivo existe
Calma aí, Pablo! kkk
A intenção eh verificar se o arquivo existe! Caso não exista, criá-lo! Mas como vou saber que éh necessário CRIAR o arquivo se toda vez a função mim retorna VERDADEIRO, mesmo que o arquivo NÃO EXISTA!?!?!?!
"Mas como vc vai escrever numa pasta que não tem permissão?". Bem, neste caso, eu penso em verificar se o arquivo existe. Se não existir, tentar criá-lo. Não conseguiu criá-lo? Mostra mensagem pedindo para executar o sistema como administrador.
Simples assim...
A função que vc indicou, ao que parece, eh apenas para MUDAR o atributo do arquivo! Mas ela esta retornando VERDADEIRO mesmo que o arquivo NAO EXISTA tbm kkk!
Janio
A intenção eh verificar se o arquivo existe! Caso não exista, criá-lo! Mas como vou saber que éh necessário CRIAR o arquivo se toda vez a função mim retorna VERDADEIRO, mesmo que o arquivo NÃO EXISTA!?!?!?!
"Mas como vc vai escrever numa pasta que não tem permissão?". Bem, neste caso, eu penso em verificar se o arquivo existe. Se não existir, tentar criá-lo. Não conseguiu criá-lo? Mostra mensagem pedindo para executar o sistema como administrador.
Simples assim...
A função que vc indicou, ao que parece, eh apenas para MUDAR o atributo do arquivo! Mas ela esta retornando VERDADEIRO mesmo que o arquivo NAO EXISTA tbm kkk!
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
comando File falhando para ver se arquivo existe
Ahhh já vi que o seu ponto de exclamação é muito comum no seu hábito...janio escreveu:Calma aí, Pablo! kkk
Parece apenas MUDAR ? Não !janio escreveu:ao que parece, eh apenas para MUDAR o atributo do arquivo!
Releia ! rs
hb_FGetAttr(<cFileName>)
Ou é o seu Harbour que tá bichado ou você testou...
Eu só quis te ajudar.
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.
comando File falhando para ver se arquivo existe
Porter:
If File("C:\ESTOQUE\ATUALIZA.EXE")
! del loja.old
! ren loja.exe *.old
! ren atualiza.exe loja.exe
MENSAGEM("Atualizado !")
endif
O problema pode ser NAO estar deletando o OLD Por isso NAo renomeia o exe.
acontece MUITO do OLD estar protegido ai nao se consegue deleta-lo.
faça assim Uso a ANOS...
* ATUALIZA€¶O do sfa.exe
xarq = [\dbdc\atualiza.exe]
if file(xarq)
for x_existe = 1 to 100
xarq = [\dbdc\sfa.]+strzero(x_existe,3)
erase &xarq
if file(xarq)
loop
endif
exit
next
rename \dbdc\sfa.exe to &xarq
rename \dbdc\atualiza.exe to \dbdc\sfa.exe
pmsg = [ATEN€¶O - Foi ATUALIZADO o Execut vel, Re-Inicie o Sistema Novamente, Obrigado]
ftempo()
quit
endif
If File("C:\ESTOQUE\ATUALIZA.EXE")
! del loja.old
! ren loja.exe *.old
! ren atualiza.exe loja.exe
MENSAGEM("Atualizado !")
endif
O problema pode ser NAO estar deletando o OLD Por isso NAo renomeia o exe.
acontece MUITO do OLD estar protegido ai nao se consegue deleta-lo.
faça assim Uso a ANOS...
* ATUALIZA€¶O do sfa.exe
xarq = [\dbdc\atualiza.exe]
if file(xarq)
for x_existe = 1 to 100
xarq = [\dbdc\sfa.]+strzero(x_existe,3)
erase &xarq
if file(xarq)
loop
endif
exit
next
rename \dbdc\sfa.exe to &xarq
rename \dbdc\atualiza.exe to \dbdc\sfa.exe
pmsg = [ATEN€¶O - Foi ATUALIZADO o Execut vel, Re-Inicie o Sistema Novamente, Obrigado]
ftempo()
quit
endif
comando File falhando para ver se arquivo existe
Pablo,
Meu ambiente:
Windows 7 64 bits
logado com usuário administrador e
UAC no nível PADRÃO
Mesmo estando logado como administrador, para escrita na pasta Windows, preciso de permissão de 'administrador' para isso, conforme imagem anexa.
Pois bem, após repetir várias vezes todos os testes e com todas as funções (hb_FGetAttr, hb_FileExists e File)... o resultado foi sempre o mesmo: as funções retornam .T. mesmo que o arquivo não exista.
Não loguei como 'convidado'. Estou logado como administrador mesmo e acho que o que está diferenciando o meu ambiente do seu, é exatamente a questão do UAC... talvez aí esteja o xis da questão!
Jânio
PS: Gostaria que alguém testasse num ambiente semelhante e confirmasse ou não o problema.
[EDIT]
Desliguei o UAC, reiniciei o computador e as funções passaram a FUNCIONAR como o ESPERADO!
O xis da questão realmente eh o UAC que faz retornar informações falsas em pastas protegidas de escrita. O UAC impede a escrita e até mesmo a simples verificação se um arquivo existe na pasta. Inacreditável!
Como resolver essa questão?
Meu ambiente:
Windows 7 64 bits
logado com usuário administrador e
UAC no nível PADRÃO
Mesmo estando logado como administrador, para escrita na pasta Windows, preciso de permissão de 'administrador' para isso, conforme imagem anexa.
Pois bem, após repetir várias vezes todos os testes e com todas as funções (hb_FGetAttr, hb_FileExists e File)... o resultado foi sempre o mesmo: as funções retornam .T. mesmo que o arquivo não exista.
Não loguei como 'convidado'. Estou logado como administrador mesmo e acho que o que está diferenciando o meu ambiente do seu, é exatamente a questão do UAC... talvez aí esteja o xis da questão!
Jânio
PS: Gostaria que alguém testasse num ambiente semelhante e confirmasse ou não o problema.
[EDIT]
Desliguei o UAC, reiniciei o computador e as funções passaram a FUNCIONAR como o ESPERADO!
O xis da questão realmente eh o UAC que faz retornar informações falsas em pastas protegidas de escrita. O UAC impede a escrita e até mesmo a simples verificação se um arquivo existe na pasta. Inacreditável!
Como resolver essa questão?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
comando File falhando para ver se arquivo existe
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
comando File falhando para ver se arquivo existe
Janio, acho estranho esse comportamento que você menciona, farei uma pergunta que talvez pareça óbvia. Porque eu não tenho dificuldades na verificação de existência de arquivo seja interferido pelo UAC.janio escreveu:Desliguei o UAC, reiniciei o computador e as funções passaram a FUNCIONAR como o ESPERADO!
O xis da questão realmente eh o UAC que faz retornar informações falsas em pastas protegidas de escrita. O UAC impede a escrita e até mesmo a simples verificação se um arquivo existe na pasta. Inacreditável!
Como resolver essa questão?
Desculpe mas sem querer menosprezar o seu procedimento. Verificou se o path está correto ? Pois eu já me deparei com várias situações em que faltava uma barra invertida...
De todas formas, tenho para mostrar 4 exemplo de elevação de privilégios usando o UAC: http://www.hmgforum.com/viewtopic.php?f=15&t=5072
Abaixe exemplos e veja se pode servir. Porque essa questão de desativar o UAC, é mais kamikaze que o uso de tais funções para elevação quando requerida.
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.

