Página 1 de 1
comando File falhando para ver se arquivo existe
Enviado: 23 Nov 2016 13:41
por porter
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.
comando File falhando para ver se arquivo existe
Enviado: 23 Nov 2016 13:45
por janio
Ja tentou com hb_FileExists??
Nao sei se tem essa função no xHarbour...
comando File falhando para ver se arquivo existe
Enviado: 23 Nov 2016 14:48
por Jairo Maia
Ou porque o arquivo loja.exe está em execução.
comando File falhando para ver se arquivo existe
Enviado: 23 Nov 2016 15:02
por Kapiaba
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
comando File falhando para ver se arquivo existe
Enviado: 24 Nov 2016 14:36
por JoséQuintas
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.
comando File falhando para ver se arquivo existe
Enviado: 13 Dez 2016 22:09
por janio
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?
comando File falhando para ver se arquivo existe
Enviado: 13 Dez 2016 22:16
por Pablo César
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.
comando File falhando para ver se arquivo existe
Enviado: 13 Dez 2016 22:30
por janio
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
comando File falhando para ver se arquivo existe
Enviado: 13 Dez 2016 22:39
por Pablo César
Janio escreveu:Preciso apenas saber se o arquivo existe!
Tá bem... mas não se irrite (dizia o Chaves pro Kiko...

) . Beleza, então...
Eu testei como "convidado" e deu certo com hb_FGetAttr(<cFileName>)
comando File falhando para ver se arquivo existe
Enviado: 14 Dez 2016 00:36
por janio
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
comando File falhando para ver se arquivo existe
Enviado: 14 Dez 2016 08:14
por Pablo César
janio escreveu:Calma aí, Pablo! kkk
Ahhh já vi que o seu ponto de exclamação é muito comum no seu hábito...
janio escreveu:ao que parece, eh apenas para MUDAR o atributo do arquivo!
Parece apenas MUDAR ? Não !
Releia ! rs
hb_FGetAttr(<cFileName>)
Ou é o seu Harbour que tá bichado ou você testou...
Eu só quis te ajudar.
comando File falhando para ver se arquivo existe
Enviado: 14 Dez 2016 08:32
por dbdc5554
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
comando File falhando para ver se arquivo existe
Enviado: 14 Dez 2016 20:55
por janio
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?
comando File falhando para ver se arquivo existe
Enviado: 14 Dez 2016 22:59
por fladimir
comando File falhando para ver se arquivo existe
Enviado: 16 Jan 2017 17:45
por Pablo César
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?
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.
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.