Fórum leitura de arquivo txt #174085

09/08/2003

0

Caros amigos , tenho um aplicativo em delphi destinado a ler um arquivo
txt na raiz da unidade c: , e funciona perfeitamente , mas tambem tenho
um aplicativo em clipper que lê o arquivo algumas vezes e apos 1 hora
mais o menos para de ler .
Sei que este forum nao e voltado a clipper mais quem quiser ajudar
:oops: ficaria muito grato.


obs . Será que tem haver com o numero de vezes que o arquivo e aberto e fechado


exemplo em clipper

do while (.t.)

arq := fopen(nome do arquivo)
fseek(arq,0)
fread(arq,@campo,2)

efetua o tratamento do que foi lido no campo

fclose(arq)

enddo


Fabivechi

Fabivechi

Responder

Posts

09/08/2003

Aroldo Zanela

Colega,

Há muitos anos que não utilizo clipper (...1997), mas verifiquei em uma antiga aplicação que eu desenvolvi e não vejo nenhuma diferença significativa do fragmento que você postou.

STATIC FUNCTION Custos()

   // Linha 438 deve ser modificada qdo mudar a geracao para tamanho 380 (c/CR e LF)


   LOCAL nHandle     := 0
   LOCAL nBloco      := 378         // Registro + CR e LF
   LOCAL nTamanho    := 0
   LOCAL cBuffer     := Space( nBloco )

   Begin Sequence

      Fonte() // Exibe nome do fonte

      If !Abre( { "ROLLBACK"  ,;
                  "SCL00009"  ,;
                  "SCL00010"  ,;
                  "SCL00011"  }, .T., .T. )
         Break
      EndIf

      If ROLLBACK -> ( dbSeek( "SCL00009" ) )
         ROLLBACK -> REGISTROS   := SCL00009 -> ( LastRec() )
         ROLLBACK -> FLAG        := .T.
      EndIf

      If ROLLBACK -> ( dbSeek( "SCL00010" ) )
         ROLLBACK -> REGISTROS   := SCL00010 -> ( LastRec() )
         ROLLBACK -> FLAG        := .T.
      EndIf

      If ROLLBACK -> ( dbSeek( "SCL00011" ) )
         ROLLBACK -> REGISTROS   := SCL00011 -> ( LastRec() )
         ROLLBACK -> FLAG        := .T.
      EndIf

      ROLLBACK -> ( dbCloseArea() )

      Rodape( "Aguarde! Importa‡Æo de arquivo de custos..." )

      If ( nHandle := FOpen( "IMPORTA\CUSTOS.TXT" ) ) >= 0
         nTamanho  := FSeek( nHandle, 0, 2 )
         FSeek( nHandle, 0 )
         While nTamanho >= nBloco

            If FRead( nHandle, @cBuffer, nBloco ) == nBloco
               Do Case
                  Case Left( cBuffer, 1 ) == "1"
                     SG3409( cBuffer )
                  Case Left( cBuffer, 1 ) == "2"
                     SG3410( cBuffer )
                  Case Left( cBuffer, 1 ) == "3"
                     SG3411( cBuffer )
               EndCase
            EndIf

            nTamanho -= nBloco
         End

         FClose( nHandle )

      EndIf


   End Sequence

   dbCloseAll()

return NIL


Apresenta alguma mensagem de erro?

A propósito, lembre-se que pode ser algum problema de violação de compartilhamento do arquivo. Veja:
     FOPEN() Sharing Modes
     ------------------------------------------------------------------------
     Mode    Fileio.ch      Operation
     ------------------------------------------------------------------------
     0       FO_COMPAT      Compatibility mode (default)
     16      FO_EXCLUSIVE   Exclusive use
     32      FO_DENYWRITE   Prevent others from writing
     48      FO_DENYREAD    Prevent others from reading
     64      FO_DENYNONE    Allow others to read or write
     64      FO_SHARED      Same as FO_DENYNONE
     ------------------------------------------------------------------------

Exemplo:

        #include "Fileio.ch"
        //
        nHandle := FOPEN("Temp.txt", FO_READWRITE + FO_SHARED)
        IF FERROR() != 0
           ? "Cannot open file, DOS error ", FERROR()
           BREAK
        ENDIF



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar