comando File falhando para ver se arquivo existe

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

comando File falhando para ver se arquivo existe

Mensagem 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.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

comando File falhando para ver se arquivo existe

Mensagem por janio »

Ja tentou com hb_FileExists??

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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

comando File falhando para ver se arquivo existe

Mensagem por Jairo Maia »

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)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

comando File falhando para ver se arquivo existe

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

comando File falhando para ver se arquivo existe

Mensagem 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.
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/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

comando File falhando para ver se arquivo existe

Mensagem 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?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Pablo César
Usuário Nível 7
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

Mensagem 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.
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.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

comando File falhando para ver se arquivo existe

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Pablo César
Usuário Nível 7
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

Mensagem 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... Imagem) . Beleza, então...

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.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

comando File falhando para ver se arquivo existe

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Pablo César
Usuário Nível 7
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

Mensagem 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>)
Screen38.png
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.
dbdc5554
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 03 Dez 2012 08:49
Localização: uberlandia-MG

comando File falhando para ver se arquivo existe

Mensagem 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
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

comando File falhando para ver se arquivo existe

Mensagem 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?
Anexos
permissao.png
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

comando File falhando para ver se arquivo existe

Mensagem por fladimir »

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.
Avatar do usuário
Pablo César
Usuário Nível 7
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

Mensagem 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.
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.
Responder