Página 1 de 2

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 12:51
por HASA
:(
Boa tarde, colegas estou enfrentando um problema que não consigo resolver. Preciso que a função file() identifique assim que um arquivo.txt for gerado, estou usando:

Código: Selecionar todos

DO WHILE !FILE( cArq )
    inkey(.5)
ENDDO
Vejo que o arquivo é gerado mas o sistema lê após NNNNNN segundos, isso em rede ok, em modo local beleza responde rapidamente, teriam alguma outra função ou dica para melhorar o desempenho?
8-|
HASA

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 13:17
por Poka
Olá

Também percebo este problema, inclusive para pegar retorno da SEFAZ.

Poka

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 14:15
por fladimir
E se vc usar uma lógica diferente?
Tipo manda esperar o arquivo entende...

Código: Selecionar todos

	local REQ, nHoraInicio := Seconds()
   REQ  := ::cDirDoMonitor + ::cArqTXT // ENT.TXT

	*-- Faca enquanto nao existir arquivo
	while .not. file(REQ)
		IF Seconds() - nHoraInicio > 300 // Tenta 60 s = 1min
		   ::cRetorno := 'ERRO: Protocolo nao esta ativo'
		   return nil
      ENDIF
      inkey(0.1)
   end

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 14:15
por fladimir
E se vc usar uma lógica diferente?
Tipo manda esperar o arquivo entende...

Código: Selecionar todos

	local REQ, nHoraInicio := Seconds()
   REQ  := ::cDirDoMonitor + ::cArqTXT // ENT.TXT

	*-- Faca enquanto nao existir arquivo
	while .not. file(REQ)
		IF Seconds() - nHoraInicio > 300 // Tenta 60 s = 1min
		   ::cRetorno := 'ERRO: Protocolo nao esta ativo'
		   return nil
      ENDIF
      inkey(0.1)
   end

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 14:45
por janio
tbm tem a função hb_FileExists()

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 17:27
por HASA
:'(
Srs. muito obrigado pela dicas, mas incrivelmente é como se o sistema fica-se cego, o arquivo tá la mas... ele não lê, demora muito.
:(Neg
HASA

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 17:45
por alxsts
Olá!

Isto tem a ver com o cache do Windows. Parece que já vi algo aqui mesmo no fórum sobre o problema. Parece que tem que desativar o cache através de alguma chave do registro do Windows (Regedit). Só não sei se isto é conveniente...

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 17:49
por HASA
:% :% :%
Caracas o que fazer!
HASA

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 22:07
por fladimir
Isso eu ia falar do CACHE e esqueci, desabilita o cache do HD reinicia e testa.

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 16 Ago 2018 22:34
por Jairo Maia
Olá HASA,

Já tentou usar Hb_FileExists( cArq )?

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 17 Ago 2018 09:22
por HASA
:(Neg
Jairo, tentei sim, o problema é em rede local vai que é um avião a jato, em rede uma carroça com cavalo manco.
:-o
HASA

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 17 Ago 2018 10:43
por ANDRIL
Esse problema já relatei tempos atrás e percebi ele quando precisei emitir NFe em rede usando o AcbrMonitor. Não consegui solucioná-lo mesmo desativando o cache do Windows. Uma operação em que na máquina local dura 5 segundos quando em rede demora no mínimo 12 segundos.
O arquivo fica criado na máquina da rede de destino, só que a máquina solicitante não enxerga. Após um delay algo é atualizado e ela passa a enxergar.

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 17 Ago 2018 10:54
por HASA
:(
Andril, EXATAMENTE isso.
:'(
HASA

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 17 Ago 2018 11:03
por Itamar M. Lins Jr.
Ola!
Tente com as novas funções do Harbour. c:\>hbmk2 -find hb_vf*

Código: Selecionar todos

Trecho extraído hbdoc.prg do Harbour 3.4 mas tem no 3.2
  IF HB_ISSTRING( cRoot )
      cDir := hb_DirSepAdd( cDir )
   ELSE
      /* Detect Harbour root */
      cRoot := "." + hb_ps()
      DO WHILE hb_vfDirExists( cRoot + ".." )
         IF hb_vfExists( cRoot + "README.md" ) .AND. ;
            hb_vfExists( cRoot + "LICENSE.txt" ) .AND. ;
            hb_vfExists( cRoot + "config" )
            EXIT
         ENDIF
         cRoot += ".." + hb_ps()
      ENDDO
   ENDIF
Então, hb_vfExists("seuarquivo.txt") e outras tantas que tornam obsoletas as funções file(), fopen() etc...
O Przmek, Viktor só usam essas novas, pois suportam também protocolo TCP tipo hb_fvopen(tcp:192.168...) e hb_vfopen(com1:...)
http://www.harbourdoc.com.br/show.asp?k ... fOpen()%22

PS.. Aprendendo o uso delas também.

Saudações,
Itamar M. Lins Jr.

ALTERNATIVA A FUNÇÃO FILE()

Enviado: 17 Ago 2018 11:28
por HASA
:D :))
Itamar, houve uma melhora de pelo menos 50% na velocidade da resposta.
:{ :{ :{
HASA