Erro na listagem de arquivos com TIpClientFtp()
Enviado: 08 Set 2022 22:14
Meu programa funciona direito no xHarbour, mas se compilar no Harbour algumas datas saem em branco.
O problema está no oFTP:listFiles() sendo objeto do TIpClientFtp().
Já descobriram esse bug desde 2016: https://github.com/harbour/core/issues/134
Poxa, dizem que hoje em dia o Harbour é tão melhor do que o xHarbour, mas eu estou tendo um monte de surpresas aí.
1 x 0 pro xHarbour.
Como eu faria para obter uma listagem do diretório de uma pasta remota com esse hbcurl?
Meu código:
O problema está no oFTP:listFiles() sendo objeto do TIpClientFtp().
Já descobriram esse bug desde 2016: https://github.com/harbour/core/issues/134
Acontece que mandaram o cara usar um tal de hbcurl até que resolvam esse bug... até hoje nada?This small example shows what happens
when the argument to hb_stod() is incomplete:
? dtos( hb_stod( '2016126' ) )
So the bug is in the day not being padl()ed to 2 digits before building
the date string.
Poxa, dizem que hoje em dia o Harbour é tão melhor do que o xHarbour, mas eu estou tendo um monte de surpresas aí.
1 x 0 pro xHarbour.
Como eu faria para obter uma listagem do diretório de uma pasta remota com esse hbcurl?
Meu código:
Código: Selecionar todos
MSGRODA("Abrindo conexão...", "W+/BG")
oFTP := TIpClientFtp():new( oURL ) // ABRE CONEXÃO FTP
IF oFTP:OPEN()
// CONEXÃO FTP ABERTA
// ENTRA NA PASTA REMOTA
MSGRODA("Acessando pasta remota no servidor...", "W+/BG")
oFTP:CWD(cFTPFOLDER) // ENTRA NA PASTA
// LISTA ARQUIVOS DA NUVEM
aBAKS := oFTP:listFiles()
ASORT( aBAKS,,,{|X,Y| X[3] > Y[3]}) // MAIS NOVOS PRIMEIRO
IF LEN(aBAKS) = 2 // SÓ . E ..
ALERT("NUNCA FOI REALIZADO NENHUM BACKUP EM NOSSO SERVIDOR REMOTO")
RETURN
ENDIF
// REMOVE . E .. DA LISTAGEM DO DIRETÓRIO
#IFDEF __XHARBOUR
// XHARBOUR APAGA E ENCOLHE
X := ASCAN(aBAKS, {|A| UPPER(A[1]) == "."})
ADEL(aBAKS, X, .T.)
X := ASCAN(aBAKS, {|A| UPPER(A[1]) == ".."})
ADEL(aBAKS, X, .T.)
#ENDIF
#IFDEF __HARBOUR__
// HARBOUR APAGA, MAS NÃO ENCOLHE.
X := ASCAN(aBAKS, {|A| UPPER(A[1]) == "."})
ADEL(aBAKS, X)
aBAKS := aSIZE(aBAKS, LEN(aBAKS)-1) // ENCOLHE ARRAY
X := ASCAN(aBAKS, {|A| UPPER(A[1]) == ".."})
ADEL(aBAKS, X)
aBAKS := aSIZE(aBAKS, LEN(aBAKS)-1) // ENCOLHE ARRAY
#ENDIF
aCHOICES := {}
FOR X=1 TO LEN(aBAKS)
cFNAME := PADL(aBAKS[X][1], 15)
cFSIZE := STR( aBAKS[X][2]/1024, 10, 0) // EM Kb
// CFSIZE := Transform( cFSIZE, "99.999.999" )
cFDATE := aBAKS[X][3]
cFTIME := aBAKS[X][4]
// Converter fuso horário UTC 0 para -3
nSECS := SECS( cFTIME )
nUTC3 := (3*3600) // 3h
nSECS -= nUTC3 // -3h
IF nSECS >= 0
cFTIME := TSTRING( nSECS ) // TRANSFORMA EM HORA C/ UTC -3
ELSE
// MADRUGADA DO DIA ANTERIOR, VOLTA 1 DIA
cFDATE -= 1 // VOLTA 1 DIA
nSECS := SECS( 86400 + nSECS ) // TRANSFORMA EM HORA
cFTIME := TSTRING( nSECS ) // ATUALIZA HORA C/ FUSO UTC -3
ENDIF
cFDATE := DTOC(cFDATE)
AADD(aCHOICES, cFNAME +"│"+cFSIZE +"│"+ cFDATE +"│"+ cFTIME )
NEXT
MSGRODA("Escolha o backup que deseja restaurar", "W+/BG")
TRJANELA(04,09,11,54,"W/B", "BACKUPS REMOTOS EXISTENTES", .T.)
@ 05,10 SAY SPACE(44) COLOR "W/BG"
@ 05,10 SAY " NOME │TAMANHO Kb│ DATA │ HORA " COLOR "W+/BG"
nBAK := ACHOICE(06,10,10,53, aCHOICES)