Página 1 de 2

Funções de baixo Nivel com problema?

Enviado: 15 Out 2015 09:33
por asimoes
Pessoal,

A minha compilação é do dia 12/10 (fork)
O que está errado neste código?
Quando faz o fwrite grava somente uma linha, sobescreve não inclui uma nova linha, está faltando alguma coisa?

Código: Selecionar todos

  IF !hb_FileExists(hb_DirBase()+"teste.txt")
     nHandle:=fCreate(hb_DirBase()+"teste.txt")
  ELSE   
     nHandle:=fOpen(hb_DirBase()+"teste.txt",1)
  ENDIF 
  fWrite(nHandle,hb_Dtoc(Date(),"DD/MM/YYYY")+" "+Time()+hb_Eol())
  fClose(nHandle)

Funções de baixo Nivel com problema?

Enviado: 15 Out 2015 09:56
por asimoes
Não havia problema, faltou o fseek

Código: Selecionar todos

 IF !hb_FileExists(hb_DirBase()+"teste.txt")
     nHandle:=fCreate(hb_DirBase()+"teste.txt")
  ELSE   
     nHandle:=fOpen(hb_DirBase()+"teste.txt",1)
  ENDIF
  FSeek(nHandle, 0, 2) //Vai pro final do arquivo
  fWrite(nHandle,hb_Dtoc(Date(),"DD/MM/YYYY")+" "+Time()+hb_Eol())
  fClose(nHandle)

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 13:53
por microvolution
Prezado professor asimoes aproveitando seu post que vc abriu e o já fechou em seguida e, para não ter que abrir outro (caso seja necessário o farei), tenho uma dúvida quanto à função HB_DIRBASE(). Vejamos:
Tenho as seguintes pastas (nomes fictícios) no meu sistema:
C:\SISTEMA
C:\SISTEMA\EMPRESA\
C:\SISTEMA\EMPRESA\BANCOdeDADOS
C:\SISTEMA\TEMP
Quando o usuário efetua LOGIN o sistema seta a pasta da empresa escolhida e vai para C:\SISTEMA\EMPRESA\BANCOdeDADOS, ou seja, se eu usar o HB_DIRBASE() para verificar o caminho será o informado neste parágrafo.
Quando quero que o usuário leia alguma coisa durante a execução do programa (antes de conhecer a função HB_DIRBASE()) eu fazia assim (exemplo só para fins didáticos):

Código: Selecionar todos

RUN C:\SISTEMA\TEMP\arquivoTexto.TXT
Bom, usando o HB_DirBase() estou fazendo agora assim (já que está setado no C:\SISTEMA\EMPRESA\BANCOdeDADOS), mudando também do comando RUN para a função HB_RUN ():
HB_RUN ( "Start "+ "NOTEPAD" + HB_DIRBASE() +"\...\..\TEMP\arquivoTexto.TXT")

Bom vamos aos resultados:
No Win 10 (64 bits) isso funciona corretamente.
Mas no Win XP (32 bits), não aceita o "...\..\".

Alguém tem alguma ideia, pois não encontrei nenhuma explicação melhor sobre o hb_dirBase()?
PS: meu harbour é o 3.4.x junto com a GTWVG.

Gracias!!!

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 14:15
por asimoes
A função hb_DirBase() coloca uma "\" no final ai está o seu erro.

ex.:

Certo:
if File(hb_DirBase()+"pasta\teste.txt"

Errado:
if File(hb_DirBase()+"\pasta\teste.txt")

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 14:36
por microvolution
Então veja se entendi. No meu caso estou pensando que está fazendo assim:
HB_DIRBASE()+"...\..\TEMP\arquivo.TXT" sendo que na verdade está é assim?
HB_DIRBASE()+"\..\..\TEMP\ARQUIVO.TXT.

Se está assim, por que no Win 10 funciona e no Win XP dá erro?
Então, qual desses abaixo devo usar para funcionar em conjunto com o "..\..\pasta"?
HB_DirBase() is equivalent to :
LEFT( ExeName(), RAT( '\', ExeName() ) )
and
HB_FNameDir( ExeName() )
and
cExeDir := ''
HB_FNameSplit( ExeName(), @cExeDir )
Vlw prezado professor e demais colegas!

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 14:54
por asimoes
Vamos lá, a primeira pergunta qual é a pasta que seu sistema roda?

A função hb_DirBase() pega o caminho onde o seu sistema está rodando.

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 14:57
por asimoes
ex.:

A pasta onde o meu sistema (sistema.exe) roda é d:\sistemas\bin

d:\sistemas\bin\sistema.exe

hb_DirBase() retorna:

d:\sistemas\bin\

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 14:58
por asimoes
Você pode também:

No seu sistema informar onde ele está rodando no XP e win10

Alert(hb_DirBase())

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 15:03
por JoséQuintas
Adicionar mais uma pergunta:
Quer saber a pasta do EXE, ou atual?

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 15:07
por microvolution
asimoes escreveu:Vamos lá, a primeira pergunta qual é a pasta que seu sistema roda?
prezado professor, isso já está respondido na minha primeira mensagem deste tópico, mas, como V.Sa. sempre está disposto a nos ajudar, ratifico:

Código: Selecionar todos

C:\SISTEMA\EMP\BANDOdeDADOS
Preciso fazer aquele comandinho que usávamos muito no MSDOS:

Código: Selecionar todos

cd ..\..\TEMP
Ou seja, o MSDOS (CMD) se eu estiver dentro da pasta do meu aplicativo: "C:\SISTEMA\EMP\BANDOdeDADOS" e fizer um CD ..\..\ ele vai para a pasta:

Código: Selecionar todos

C:\SISTEMA\TEMP
Como você mesmo me clareou o HB_DIRBASE() coloca uma "\" barra no final e então o "..\..\TEMP" não funciona corretamente.
Agora vai entender o "porquê" que no Win 10 (64 bits) aceita mesmo assim com a "barra" e no win xp não aceita...
rsrsrs :))

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 15:31
por asimoes
De Paula,

Vamos lá:

O correto é:

HB_RUN ( "Start "+ "NOTEPAD " + HB_DIRBASE() +"..\..\TEMP\arquivoTexto.TXT")

No seu post não tem um espaço depois do NOTEPAD

Obs.: Simulei a sua pasta aqui no meu notebook que é win10 acredito que no XP vai funcionar também.

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 16:00
por microvolution
asimoes escreveu:Obs.: Simulei a sua pasta aqui no meu notebook que é win10 acredito que no XP vai funcionar também.
prezado é issto que estou tentando explicar desde o início...
acredito que no XP vai funcionar também
Mas, não funciona...
rsrs

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 16:14
por asimoes
De paula,

No windows 10 funciona ok.
No xp não, simule no prompt no Xp a chamada do notepad

Você verificou o espaço que tem que ter depois do notepad no comando hb_run?

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 16:32
por microvolution
Prezado(s) veja(m) o prtscreen que fiz da tela do win xp (neste exato momento):
16-0117 - arquivo nao abre no WXP.JPG
Agora, o mesmo aplicativo rodando no Win10:
16-0117 - arquivo nao abre no W10.jpg
Bom, agora deu pra ter certeza do que eu já tinha certeza?
... estou estudando 2 funções do harbour que chamam-se:
ExeName() e Rat().
Vou fazer um teste e se der certo posto o resultado e como fiz... ok pessoal?

Funções de baixo Nivel com problema?

Enviado: 17 Jan 2016 16:50
por JoséQuintas
Esse gosta de complicar.
Parece até brincadeira.