Página 1 de 1

como usar adir()

Enviado: 10 Ago 2010 15:29
por joselimatb
ola pessoal,
tenho que localizar e usar um arquivo em uma pasta mas o tamanho dele é maior que 8 caractere e o adir() so aparece 8 , se me trazer o nome e data da ultima atualizacao com hora me resolve.
Fiz um exemplo abaixo, mas como ja falei so aparece o nome com 8 caracter.

o que devo mudar ?

Código: Selecionar todos

private vdir[adir("*.xml")]
adir("*.xml",vdir)
vop:=achoice(12,2,20,70,vdir)
if vop=0
   return
endif
@ 22,10 say " Arquivo escolhido :" +vdir[vop]
return

Re: como usar adir()

Enviado: 10 Ago 2010 15:38
por alxsts
Olá!

Se você pretende continuar com Clipper, terá que se valer de uma lib chamada LFN.Lib (Long File Names). Use a busca do fórum que encontrará algum material.

Outra opção seria migrar para [x]Harbour.

como usar adir()

Enviado: 10 Ago 2010 17:26
por Pablo César
mas como ja falei so aparece o nome com 8 caracter
Isso acontece porque essa função traz o nome em modo Short Name e não Long Name e daí você precisará uma função que trate isso, como o LFN.LIB como o colega ja mencionou.

Re: como usar adir()

Enviado: 10 Ago 2010 20:07
por joselimatb
tem como aparecer o nome e data com hora da criacao ?

como usar adir()

Enviado: 10 Ago 2010 20:49
por Pablo César
Veja alterações pra você entender por si próprio:

Código: Selecionar todos

/* 
Compilar este exemplo da seguinte forma: 
         CLIPPER TESTE
         RTLINK FI TESTE LIB LFN,NANFOR,LL
*/
nArquivos:=adir("*.xml")
private vdir[nArquivos],vTam[nArquivos],vDat[nArquivos],vHor[nArquivos],vAtr
adir("*.xml",vdir,vTam,vDat,vHor,vAtr)
CLS
vop:=achoice(12,2,20,70,vdir)
if vop=0
   return
endif
// Mostrar as variaveis na tela
setpos(21,00) // só para posicionar na tela (dispensar esta função)
? padr("Data",18,".")+": "+padr(DTOC(vDat[vop]),59)
? padr("Hora",18,".")+": "+padr(vHor[vop],59)
? padr("Tamanho",18,".")+": "+padr(ALLTRIM(STR(vTam[vop]))+" bytes",59)
? padr("Atributo",18,".")+": "+padr(vAtr[vop],59)
? padr("Arquivo escolhido",18,".")+": "
?? LF_TOLONG(vdir[vop])
Note a função LF_TOLONG na ultima linha, serve para mostrar o nome do arquivo em modo longo.
Agora se precisar que seja exibido na tela os nomes longos ao invés de nomes curtos, substitua a linha 10 (do meu exemplo aqui acima) pelas linhas a seguir:

Código: Selecionar todos

vLong:={}
for i=1 to nArquivos
    aadd(vLong, LF_TOLONG(vDir[i]))
next
vop:=achoice(12,2,20,70,vLong)

Re: como usar adir()

Enviado: 11 Ago 2010 14:59
por joselimatb
Ola Pablo.

Ate testei, mas na horad e copilar aparece o seguinte erros:

sysbol first reference

cpmifreedosmem nanfor.lib
cpmiint86
cpmirealptr
cpmiallocatedosmem
cpmiisprotected

como usar adir()

Enviado: 11 Ago 2010 17:23
por Pablo César
Ate testei, mas na horad e copilar aparece o seguinte erros
Se deu erro na compilação, então não conseguiu testar... Pelo que parece está precisando adicionar a CPMI.LIB
Se você está precisando as libs LFN,NANFOR,LL,CPMI você pode encontrar neste tópico em arquivo anexo zipado: https://pctoledo.org/forum/viewto ... 194#p47194

Re: como usar adir()

Enviado: 11 Ago 2010 18:20
por ANDRIL
Com certeza falta essas libs citadas pelo Pablo, basta adiciona-las no seu script de linkagem.

Essa lib tem a função LF_DIRECTORY() que por sua vez, é exatamente como o aDir() e o Directory() nativos do Clipper. Fiz um teste pensando que iria retornar os nomes de arquivos longos, mais retornou no modo DOS com 8 caracteres.

Por que existe ela entao??? Alguem ja conseguiu retornar nomes longos diretamente atraves dela ou foi só pra encher linguiça nesta lib?

Ate+

Re: como usar adir()

Enviado: 11 Ago 2010 18:50
por Toledo
Andril, a função LF_Directory() retorna uma matriz multidimensional com os seguintes elementos:

1º elemento: Nome curto do arquivo
2º elemento: Tamanho do arquivo
3º elemento: Data do arquivo
4º elemento: Hora do arquivo
5º elemento: Atributo do arquivo
6º elemento: Nome longo do arquivo

Veja este exemplo:

Código: Selecionar todos

#include "lfnlib.ch"
PRIV aArqui:={}
aArqui:=LF_Directory("C:\Documents and Settings\Toledo\Meus documentos\*.doc")
FOR i=1 TO LEN(aArqui)
  ? aArqui[i,1], aArqui[i,6]
NEXT
retu
Abraços,

Re: como usar adir()

Enviado: 11 Ago 2010 19:10
por ANDRIL
Toledo, obrigado pelo esclarecimento.

Ate+

Re: como usar adir()

Enviado: 12 Ago 2010 16:03
por joselimatb
Ola, alguem tem "lfnlib.ch" ?

Valeu

Re: como usar adir()

Enviado: 12 Ago 2010 16:29
por Toledo
Segue em anexo!

Abraços,

Re: como usar adir()

Enviado: 13 Ago 2010 16:12
por joselimatb
Ainda erro

estou copilando : CLIPPER diop
RTLINK FI diop LIB lfn,NANFOR,LL


erros:

symbol First refence
clipper501 nanfor.lib
cpmiisprotected ll.lib
cpmiprotectedptr ll.lib
cpmifreeselector ll.lib


oque esta de errado ?

Valeu

Re: como usar adir()

Enviado: 13 Ago 2010 16:53
por Toledo
Amigo, segue em anexo a NANFOR para Clipper 5.2.

Compile assim:

CLIPPER diop
RTLINK FI diop LIB LFN,NANFOR52,CPMI

Abraços,