Página 2 de 2

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 09 Set 2022 15:51
por Linguagemclipper
Xharbour deu problema? Estou usando a versão 1.2.1 e não deu problema, a versão 1.2.3 dá problema? Não entendí.

Enfim, Quintas, eu não sei qual é o critério que você usa para restaurar um backup, mas certamente a data é o principal critério para a maioria das pessoas.

Mesmo fonte em compiladores diferentes:
====================================================================
Imagem
Compilação com Harbour v3.2
-------------------------------------------------------------------------------------------------
Imagem
Compilação com xHarbour v1.2.1
====================================================================

A listagem do FTP são de backups que são salvos lá no servidor para poderem ser restaurados em qualquer lugar mediante senha. No Harbour os backups feitos antes do dia 10 saem em branco ou com data errada.

Quintas, não vejo razão para salvar os dados de backup no banco de dados e nem uso MYSQL. Também não acho mais seguro porque se o arquivo for apagado seu banco de dados apontará para um arquivo inexistente.

Aliás, a hora do servidor remoto não estão erradas, todas elas não UTC, hora universal, ou seja, UTC 0. Então, se nosso fuso horário é UTC -3 basta fazer a conversão e corrigir a hora e, se for o caso, a data também. Daí, saberemos o dia e hora corretos do backup. Nessa listagem está sendo feito isso.

Na minha pasta hb32/contrib/hbtip contém:
tests/
hbtip.hbc
hbtip.hbx
thtml.ch
tip.ch
Nenhum deles é o fonte. Aliás, não sei para que tem esses arquivos se não tem o fonte. Não sei como posso consertar e recompilar sem ter nem o fonte.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 09 Set 2022 19:32
por JoséQuintas
Linguagemclipper escreveu:Na minha pasta hb32/contrib/hbtip contém:
tests/
hbtip.hbc
hbtip.hbx
thtml.ch
tip.ch

Nenhum deles é o fonte. Aliás, não sei para que tem esses arquivos se não tem o fonte. Não sei como posso consertar e recompilar sem ter nem o fonte.
Só baixar os fontes do github, tá tudo lá pra quem quiser.
Ao contrário do XHarbour, tá tudo num lugar só, pode baixar tudo de uma vez.

Sobre esses arquivos, vamos lá:

hbtip.hbc -> indica para o HBMK2 sobre dependências a serem adicionadas
hbtip.hbx -> referência para o HBMK2, pra mostrar manual, ou pra gerar LIBs dinâmicas/estáticas
thtml.ch -> já sabe, pra usar nos PRGs
tip.ch -> já sabe pra usar nos PRGs

Tudo usado na compilação de um programa, não apenas pra gerar hbtip.
hb.png
Mais fácil impossível, só clicar em CODE.
Mas quando está de má vontade, tudo é complicado.

INFELIZMENTE, como dá pra usar trocentos compiladores C, e trocentos sistemas operacionais, e cada compilador hoje em dia pode chegar a 1GB, não existe mais uma versão pronta, a última foi do Harbour 3.0. Mas tem a versão nightly gerada toda noite.

Também dá pra ver cada arquivo on-line, ou baixar cada um, mas isso também é normal no XHarbour/source-forge

https://github.com/harbour/core/tree/ma ... trib/hbtip

o fonte em questão é este:
https://github.com/harbour/core/blob/ma ... ftpcli.prg

método listfiles.
Olhando parece igual do Harbour 3.4

Sugestão:

Código: Selecionar todos

/* Listing formats (from libcurl)
   https://github.com/curl/curl/blob/master/lib/ftplistparser.c
   Unix version 1: drwxr-xr-x 1 user01 ftp  512 Jan 29 23:32 prog
   Unix version 2: drwxr-xr-x 1 user01 ftp  512 Jan 29 1997  prog
   Unix version 3: drwxr-xr-x 1      1   1  512 Jan 29 23:32 prog
   Unix symlink  : lrwxr-xr-x 1 user01 ftp  512 Jan 29 23:32 prog -> prog2000
   DOS style/IIS : 01-29-97 11:32PM <DIR> prog
   DOS style/IIS : 01-29-97 11:32PM    512 prog
   DOS style/IIS : 01-29-2010 11:32PM <DIR> prog
 */

// Parse the :list() string into a hb_vfDirectory() compatible 2-dim array
METHOD ListFiles( cFileSpec ) CLASS TIPClientFTP

   LOCAL aMonth := { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }

   LOCAL aList, aFile, cEntry, nStart, nEnd
   LOCAL cYear, cMonth, cDay, cTime

   LOCAL cList := ::list( cFileSpec )
Coloque depois disso pra salvar cLIST em disco, e veja como retornou do SEU servidor.
Poste lá na questão sobre hbtip pra que saibam qual o formato retornado.
Se for preciso, salve arquivo com um dígito na data/hora, talvez até isso tenha que ser feito hoje, se for data do servidor, porque amanhã será dia 10.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 09 Set 2022 19:45
por JoséQuintas
Sobre o problema:

CADA servidor cria a lista num formato diferente.
Pode ser que SEU servidor faça diferente, ou pode ser só o ajuste de 2 dígitos.
Por isso o melhor negócio é olhar o formato da lista do SEU servidor, ANTES da hbtip processar, que é nessa parte que mostrei.

O "fazer diferente", pode ser versão mais nova de sistema operacional lá no servidor, que não tinha aparecido antes.
Tudo é possível.
E justamente porque CADA servidor pode retornar de um jeito, precisa ver como o seu retorna.

Se não percebeu é um TXT, que é processado pra retirar as partes dele.

Como se fosse isto:

Código: Selecionar todos

DIR > lista.txt

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 11 Set 2022 13:29
por Linguagemclipper
Voltando aqui para reportar alguns achados.

Achei o suposto problema com a versão 1.2.3 do xHarbour: tem que usar o BCC58, mas eu estava usando o BCC55. Como não dava erro, não percebí. Agora com a última compilação 1.2.3 Rev. 10264 deu erro e me toquei que poderia ser isso. Utilizei o BCC58, compilou tudo sem erros e inclusive aquele problema nos meus relatórios, que não saia nada, foi resolvido.

Além disso, os binários da última versão 1.2.3 Rev. 10264 também vieram com a bendita função hb_jsonDecode() e a HB_Base64Decode() -aleluia!-, mas como nem tudo são flores, aquela função, problema deste tópico: oFTP:listFiles(), objeto oFTP de TIpClientFtp(), está com o mesmo problema do Harbour...
Que confusão! Ao invés de pegarem emprestado a TIpClientFtp() do xHarbour para o Harbour, acabaram pegando a TIpClientFtp() do Harbour para o xHarbour... -só se foi isso!

Aí fui pegar os fontes do xHarbour, mas a última versão do sourceforge é a 1.2.1 (salvo engano) que não é igual à dos binários que eu tenho e funciona (conforme provei na foto de um post anterior). Compilei esses fontes com o BCC58 (BCC55 dava erro). Passei ontem o dia inteiro nisso, inclusive atualizei o passo-a-passo para quem quiser compilar o xharbour dos fontes aqui: https://linguagemclipper.com.br/dicas/xharbour/cvs -Tem uma paradinha lá do Bison que é bisonho!
Entretanto, essa versão 1.2.1 dos fontes além de não funcionar direito a TIpClientFtp() também não tem as funções hb_jsonDecode() e a HB_Base64Decode() de que preciso... a saga continua!

Aí fui atrás dos fontes da última versão 1.2.3 no xharbour.org, mas lá só tem os arquivos C, não está prontinho para compilar com todos os arquivos necessários, tem nada na pasta raíz. Complicou! Pensei que estava por um triz...

Voltei para o sourceforge e baixei o branch com a data mais recente que tinha lá achando que daria no 1.2.3, mas deu erro e não compilava.

Vou tentar agora ver se compilo dos fontes do Harbour aí que o Quintas indicou. Aliás, vou tentar compilar com o HMG 3.4 primeiro.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 11 Set 2022 16:23
por JoséQuintas
Linguagemclipper escreveu:Que confusão! Ao invés de pegarem emprestado a TIpClientFtp() do xHarbour para o Harbour, acabaram pegando a TIpClientFtp() do Harbour para o xHarbour... -só se foi isso!
Como eu disse, depende de servidor, talvez pra resolver outros problemas fizeram isso, e agora o layout do seu servidor dá problema.

Conclusão interessante:
Pesquisou, pesquisou, pesquisou, e vai ter que ir atrás da mesma solução para os dois.
É como eu disse: adota uma coisa e vai atrás, se ficar escolhendo, só vai ficar cada vez mais na dúvida.

Bem que Harbour e XHarbour poderiam virar um só, mas considerando que até o Harbour se dividiu, sei lá....

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 16 Set 2022 12:05
por Linguagemclipper
Fiquei uns 3 ou 4 dias sem poder ver nada por problemas diversos, mas lhe adianto que a questão do servidor que você fala é o mesmo.
Esses testes aí estão sendo feitos no mesmo servidor, então o resultado deveria ser o mesmo, entretanto se compilo com xhb 1.2.1 dá certo, mas se compilo com xhb 1.2.3 ou hb 3.2 falha.
Vou adiantar algumas coisas atrasadas aqui e assim que puder volto pra guerra e dou um feedback maior.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 16 Set 2022 12:27
por JoséQuintas
Linguagemclipper escreveu:Fiquei uns 3 ou 4 dias sem poder ver nada por problemas diversos, mas lhe adianto que a questão do servidor que você fala é o mesmo.
Esses testes aí estão sendo feitos no mesmo servidor, então o resultado deveria ser o mesmo, entretanto se compilo com xhb 1.2.1 dá certo, mas se compilo com xhb 1.2.3 ou hb 3.2 falha.
Vou adiantar algumas coisas atrasadas aqui e assim que puder volto pra guerra e dou um feedback maior.
Foi feita mudança que atende a maioria, menos o seu caso.
É você capturar a saída do SEU servidor como mostrei.

É por isso que é importante acompanhar as mudanças, e sempre usar última versão, assim já repassa quando estão com a "mão na massa".

É ruim assim.... é.... mas adotaram o mesmo esquema da libcurl e pro seu servidor não deu certo.
Como a saída pode ser alterada conforme configuração do servidor, não se sabe qual é a saída do seu servidor.
É capturar a saída e dar uma comparada com os modelos previstos.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 17 Set 2022 00:56
por Linguagemclipper
Tentei com o Harbour 3.4 e também não funcionou. Aliás, funcionou com o mesmo problema do Harbour 3.2.
Fiz um garrancho aqui tentando arrumar os fontes do xharbour 1.2.3 e tive que baixar de novo...
Acabei de baixar novamente o xHarbour 1.2.3 e FUNCIONOU!!!!

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 17 Set 2022 02:13
por JoséQuintas
Ao invés de mexer nos fontes originais, faz uma classe por herança e altera só a parte que interessa, pra teste ou pra uso definitivo.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 17 Set 2022 10:54
por Itamar M. Lins Jr.
Olá!
Use o harbour 3.2
Eu te passo a lib corrigida se for o caso. Eu uso GCC 10.3.0 use o mesmo.
É apenas 1 linha para resolver.
Tem tutorias de como baixar e compilar o Harbour 3.2, não é nenhum bicho de 7 cabeças.

Saia do xHarbour o quanto antes. Se não conseguimos sair do xHarbour, como iremos aprender outras linguagens ? E até abandonar o Harbour se precisar ?
xHarbour é problema, não tem quase ninguém mais usando. Nem o pessoal que mantinha ele está mais usando. Desapega, desapega...
Vc tem site, faz tutorial, etc... Coloca lá no teu site como compilar o Harbour 3.2 dos fontes(aqui no forum tem alguns tutoriais), o pessoal vai agradecer.

Saudações,
Itamar M. Lins Jr.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 17 Set 2022 15:17
por JoséQuintas
Aliás... tem tanta coisa pra se aprender.... tá ficando preso a isso do FTP.

Faz o que falei, HERANÇA

Tem lá a classe do Harbour, peguei do 3.4:

Código: Selecionar todos

CREATE CLASS TIPClientFTP 
Cria a sua por herança:

Código: Selecionar todos

CREATE CLASS MyFTP INHERIT TipClientFTP
   METHOD ListFiles( cFileSpec )
  ENDCLASS
METHOD ListFiles( cFileSpec ) CLASS MyFTP

   LOCAL cList := ::list( cFileSpec )
 // ------------ aqui captura a saída do seu servidor
   hb_MemoWrit( "lista", cList )
...
No seu fonte, ao invés de usar do harbour
oFtp := tipClientFtp():New()
vai usar a sua
oFtp := MyFtp():New()

A herança é uma classe que faz tudo que a outra faz.
Mas você pode alterar uma parte dela, sem mexer no fonte original.
Na classe acima, vai alterar apenas o método ListFiles(), NÃO PRECISA do restante dos fontes, só coloca esse método.

É exatamente o que precisa, é usar um Harbour pronto e usar herança, sem mexer nos fontes originais.
Se no fonte do XHarbour também for classe, e o XHarbour permitir herança, é só fazer a mesma coisa.

Assim só se preocupa em resolver, sem arrumar um novo problema ainda maior.

Quando ajustarem o Harbour/XHarbour, aí remove sua classe de herança e usa a corrigida, só alterando o nome da classe.
Enquanto não corrigem, a sua tá pronta, usa normalmente, sem depender de versão nova, e o principal: USANDO A VERSÃO OFICIAL DO HARBOUR/XHARBOUR.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 18 Set 2022 09:34
por Linguagemclipper
Obrigado, Quintas! Não sabia como fazer essa questão da herança.

Erro na listagem de arquivos com TIpClientFtp()

Enviado: 18 Set 2022 09:42
por Linguagemclipper
Itamar M. Lins Jr. escreveu:Olá!
Use o harbour 3.2
Eu te passo a lib corrigida se for o caso. Eu uso GCC 10.3.0 use o mesmo.
É apenas 1 linha para resolver.
Tem tutorias de como baixar e compilar o Harbour 3.2, não é nenhum bicho de 7 cabeças.

Saia do xHarbour o quanto antes. Se não conseguimos sair do xHarbour, como iremos aprender outras linguagens ? E até abandonar o Harbour se precisar ?
xHarbour é problema, não tem quase ninguém mais usando. Nem o pessoal que mantinha ele está mais usando. Desapega, desapega...
Vc tem site, faz tutorial, etc... Coloca lá no teu site como compilar o Harbour 3.2 dos fontes(aqui no forum tem alguns tutoriais), o pessoal vai agradecer.

Saudações,
Itamar M. Lins Jr.
Olá, Itamar!
Rapaz, quero sim colocar um tutorial para compilar o Harbour dos fontes, só sei do xHarbour e já coloquei lá no meu site. Se tiver fácil aí uns links q vc disse que tem aqui lhe agradeço se apontar, se não der eu procuro aqui mais tarde. Passei a semana com dor nas costas sem poder fazer muita coisa além de outros problemas, é a vida. Ainda estou com a coluna doendo... graças a Deus! Louvado seja! (em tudo dai graças, correto?)

Minha gente, vou planejar essa migração para o Harbour, ok? No momento essa versão xhb 1.2.3 além de vir com todas as LIBs e mais outras consegue manter o programa compacto com o UPX: 800Kb. Seu eu for comprimir com o Harbour dá quase 2Mb. Conseguí resolver todos os problemas pendentes e, enfim, liberar a nova versão do meu sistema. Estava empacado com essas coisas do JSON, Base64 e o :listfiles().