HASA Posted August 16, 2018 Report Share Posted August 16, 2018 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: 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? HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 16, 2018 Report Share Posted August 16, 2018 O programa fica na bandeja do windows? Quote Link to comment Share on other sites More sharing options...
HASA Posted August 16, 2018 Author Report Share Posted August 16, 2018 O meu não, na verdade é o acbrmonitor que gera o TXT vc vê o arquivo lá e o sistema demora para muito para ler em rede com ou sem mapeamento, ok. HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 16, 2018 Report Share Posted August 16, 2018 Uma alternativa seria: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=343&p=1251&hilit=programa+no+tray#p1251 Quote Link to comment Share on other sites More sharing options...
emotta Posted August 16, 2018 Report Share Posted August 16, 2018 Não sei se vai ajudar, mas segue uma alternativa a função File ** Acredito que o problema não seja a função em si mas a rede que está lenta... Vc já tentou fazer um teste em outra linguagem? Delphi por exemplo? Acredito que vai enfrentar o mesmo problema... Function u_Teste() Local cFile := "g:\result.txt" MsgStop(MyFile(cFile)) Return Static Function MyFile(cFile) Return Len(Directory(cFile)) > 0 kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 16, 2018 Report Share Posted August 16, 2018 Sem um TIMER Emotta? Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted August 16, 2018 Report Share Posted August 16, 2018 Experimente a função hb_FileExists() Quote Link to comment Share on other sites More sharing options...
CIACPD Posted August 17, 2018 Report Share Posted August 17, 2018 Olá HASA, troque o seu inkey( .5) por SysRefresh() SysWait( .2 ) comigo resolveu. Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 Srs. sem sucesso, hoje vou tentar alguma forma alternativa ( ainda não sei o que ) vou fazer vários testes se tiver sucesso, aviso ok. HASA Quote Link to comment Share on other sites More sharing options...
emotta Posted August 17, 2018 Report Share Posted August 17, 2018 Sem um TIMER Emotta? Kapiaba, eu fiz a função alternativa a FILE... Agora basta ele aplicar isso a funcionalidade dele, no caso do exemplo dele bastaria ele substituir onde chamava a FILE para MYFLE Exemplo: DO WHILE !MYFILE( cArq ) inkey(.5) ENDDO Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Tente com AfindFile() PRIVATE cDirExe := cFILEPATH(GETMODULEFILENAME(GETINSTANCE())) cPdf := aFindFile( ALLTRIM( cArchivo ) + "-danfe.pdf", ; cDirExe+"unidanfe\email\anexos" ) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=17784&start=0&hilit=archivo+en+red Quote Link to comment Share on other sites More sharing options...
emotta Posted August 17, 2018 Report Share Posted August 17, 2018 Srs. sem sucesso, hoje vou tentar alguma forma alternativa ( ainda não sei o que ) vou fazer vários testes se tiver sucesso, aviso ok. HASA Como eu disse, acredito que o problema não seja a linguagem e sim a REDE... Entenda da seguinte forma, a linguagem pergunta ao sistema operacional de o arquivo existe. O sistema operacional pergunta a rede. Se a rede responde que não existe não tem o que a linguagem fazer. Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 Bom dia, EMOTTA, KAPI agradeço, veja uma solução que para mim deu certo e vocês acredito podem usar http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=19366&p=124922#p124922 HASA kapiaba 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted August 17, 2018 Report Share Posted August 17, 2018 Essa função hb_vfExists pelo que vi só tem no Harbour, pelo menos tentei aqui e deu que a função não existe, meu xHarbour é de 2013.... Vc usa Harbour ou xHarbour? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Hasa, não consigo fazer funcionar o exemplo do Viktor, o que está errado? /* * HBDOC reader test * * Copyright 2010 Viktor Szakats (vszakats.net/harbour) */ #include "directry.ch" #include "simpleio.ch" #include "FiveWin.ch" static oWnd function Main() local oBar, cRoot cRoot := cFILEPATH(GETMODULEFILENAME(GETINSTANCE())) // cRoot := "C:\FWH1701\SAMPLES\" // ? cRoot DEFINE WINDOW oWnd TITLE "3D objects" DEFINE BUTTONBAR oBar _3D OF oWnd DEFINE BUTTON OF oBar ACTION FWHBDOC( cRoot ) SET MESSAGE OF oWnd TO "3D Objects" NOINSET CLOCK DATE KEYBOARD ACTIVATE WINDOW oWnd return nil FUNCTION FWHBDOC( cRoot ) LOCAL aEntry LOCAL cName LOCAL aDir LOCAL cDir LOCAL aFile LOCAL tModified LOCAL aErrMsg LOCAL tmp 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" ) */ // hb_vfExists IF hb_vfExists( cRoot + "LICENSE.txt" ) EXIT ENDIF cRoot += ".." + hb_ps() ENDDO ENDIF ? "Root:", cRoot aDir := { cRoot } FOR EACH aFile IN hb_vfDirectory( cRoot + "contrib" + hb_ps() + hb_osFileMask(), "D" ) IF "D" $ aFile[ F_ATTR ] .AND. ; !( aFile[ F_NAME ] == "." .OR. aFile[ F_NAME ] == ".." ) AAdd( aDir, cRoot + "contrib" + hb_ps() + aFile[ F_NAME ] ) ENDIF NEXT FOR EACH cDir IN aDir IF ! Empty( tModified := __hbdoc_DirLastModified( cDir ) ) cName := DirGetName( cDir ) IF Empty( cName ) cName := "harbour" ENDIF aErrMsg := {} aEntry := __hbdoc_LoadDir( cDir, cName, aErrMsg ) /* TODO: apply code formatting, HBDOC section and content validation here. It's also possible to create output generators at this point. These generators should simply parse the list of entry hashes and spit out output in selected end-user format, like .html or .pdf */ FOR EACH tmp IN aErrMsg ? [temp], tmp NEXT IF ! Empty( aEntry ) ? __hbdoc_SaveHBD( cName, aEntry ), cName, Len( aEntry ), tModified ENDIF ENDIF NEXT RETURN NIL STATIC FUNCTION DirGetName( cDir ) LOCAL cName := hb_FNameName( hb_DirSepDel( cDir ) ) IF cName == "" .OR. cName == "." .OR. cName == ".." RETURN "" ENDIF RETURN cName Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Entendi, mas só roda em Harbor. /* * HBDOC reader test * * Copyright 2010 Viktor Szakats (vszakats.net/harbour) */ #include "directry.ch" #include "simpleio.ch" #include "FiveWin.ch" static oWnd function Main() local oBar, cRota // cRota := "C:\FWH1701\SAMPLES\" cRota := cFILEPATH(GETMODULEFILENAME(GETINSTANCE())) VER_TXT( cRota ) return nil FUNCTION VER_TXT( cRota ) IF hb_vfExists( cRota + "LICENCA.TXT" ) ? [ACHEI O TXT - HARBOUR] ELSE ? [NAO ACHEI O TXT] ENDIF RETURN NIL Quote Link to comment Share on other sites More sharing options...
alex2002 Posted August 17, 2018 Report Share Posted August 17, 2018 Galera, boa tarde. Se usar o "Do While" vai comer o processamento da máquina todo. Sugiro colocar um TIMER ao invés de deixar em um LOOP. Assim não consome recursos do PC. Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 - Boa tarde, sai para visita, vamos lá, Srs. me perdoem mas sou um intruso na verdade hoje uso MINIGUI EXTEND + HARBOUR 3.2 + BCC55, porem as dicas quando são a nivel de Harbour e as vezes XHarbour a gente pode usar de boa tanto faz se é Minigui ou FiveWin, o Kapi já matou a função é assim mesmo, para vocês terem uma ideia o processamento melhorou em 50% ok, ou seja a resposta de 20 seg caiu para 10 seg. já é um bom ganho. HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Não tenho certeza, mas eu acho que o aFindFile(), é mais rápido, uso-o e é mamão com açúcar, se der teste ahi, Hasa. Abs. Quote Link to comment Share on other sites More sharing options...
alex2002 Posted August 17, 2018 Report Share Posted August 17, 2018 "uso-o e é mamão com açúcar, se der teste ahi, Hasa. Abs. " O João sendo Kapi. rsrsrrs Abraços meu amigo. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Tú sumiu Alexandre. Que couve? Abs. Quote Link to comment Share on other sites More sharing options...
emotta Posted August 17, 2018 Report Share Posted August 17, 2018 Galera, boa tarde. Se usar o "Do While" vai comer o processamento da máquina todo. Sugiro colocar um TIMER ao invés de deixar em um LOOP. Assim não consome recursos do PC. Um abraço, Alexandre Pereira Alexandre, não vai comer processamento pq ele está colocando um INKEY antes do enddo Eu invez do inkey costumo usar o ThreadSleep e como parametro passo qtos milisegundos eu quero deixar o programa "dormindo", exemplo, se eu quiser um descanso de 1 segundo eu coloco ThreadSleep(1000) Então fica mais ou menos assim DO WHILE !FILE( cArq ) ThreadSleep(500) // parada de meio segundo ENDDO Desta maneira o processador não é sobrecarregado. Caso queira algo mais rapido colocando ThreadSleep(10) já é o suficiente pra não deixar o processo em 100% Quote Link to comment Share on other sites More sharing options...
HASA Posted August 17, 2018 Author Report Share Posted August 17, 2018 Kapi, estou usando Harbour 3.2 e o mesmo me disse que não sabe quem é aFindFile() :-( HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 17, 2018 Report Share Posted August 17, 2018 Sorry, comando do FiveWin. aResult := aFindFiles( "readme.txt","c:") Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.