Página 1 de 1

LER Arquivo com duas extensões, ou arquivo longo, COMO ??

Enviado: 11 Fev 2008 11:32
por caputo
Pessoal estou com arquivo q a Bemafi32.dll gera eu quero mudar ele de pasta (diretorio) e apagar ele de onde esta, ele esta no C:\ o arquivo existe como nome BE645786.728.RFD, porem o retorno da função é FALSO "arquivo não encontrado"
IF FILE("C:\BE645786.728.RFD")
RETURN(.T.)
ELSE
RETURN(.F.)
ENDIF
pois nunca tiver q ler arquivo com mias de uma extensão ou arquivo longo
eu uso o clipper5.2e BLINKER 7.0

Enviado: 11 Fev 2008 11:35
por Maligno
O Clipper só consegue "enxergar" arquivos com nomes no formato DOS 8x3. Pra arquivos com nomes longos você precisará de uma biblioteca extra. No meu site tenho a biblioteca LFN. Baixe e teste. Deve resolver o problema.

Enviado: 11 Fev 2008 15:03
por caputo
desde já muito grato pelo ajuda Maligno, porem
não consegui fazer funcionar coloquei as LIB´s
\CLIPPER52E\LIB\LFN.LIB
\CLIPPER52E\LIB\LL.LIB
\CLIPPER52E\INCLUDE\LFNLIB.CH
\CLIPPER52E\INCLUDE\LFINT86.CH
no meu .LNK
LIB LL
LIB LFN
no fonte
#INCLUDE FTINT86.CH
#INCLUDE LFNLIB.CH
#INCLUDE FILEIO.CH
executei a função das seguintes formas
var1 := LF_FCOPY("C:\naoconsigocopiar.aaa.bbb","C:\teste.ok")
var1 := LF_FCOPY("C:\naoconsigocopiar.aaa.bbb","C:\teste.ok",16)
var1 := LF_FCOPY("C:\naoconsigocopiar.aaa.bbb","C:\teste.ok",32)
aparece o Erro BASE/1001 Undefined function: FT_STOD
vc teria um exemplo para mim ou seberia me falar onde estou fazendo errado?

Enviado: 11 Fev 2008 16:01
por Maligno
Nunca usei esta LIB. Mas vendo o erro "undefined function FT_STOD" imaginei que fosse necessário incluir a biblioteca NanFor. Lendo o README da LFN confirmei: realmente você precisará da NanFor, que também está no meu site, naquele mesmo diretório. O ZIP é o Nanforum_toolkit. Mas um detalhe: no ZIP da NanFor há um pacote (outra LIB) chamada CMPI, utilizada pelas funções Assembly da biblioteca LL.LIB. Inclua no script. Então são quatro a incluir: LFN, LL, NANFOR e CPMI.

Enviado: 13 Fev 2008 10:08
por caputo
Maligno, agora deu tudo certo.
Fiz tudo como vc me passou esta funcionando 100%.
Um obrigado seria pouco pela ajuada q vc me deu, MUITO OBRIGADO MESMO !

nome de diretorio e nome de arquivo

Enviado: 15 Fev 2008 12:46
por tonyx
CARO MALIGUINO AIDA ESTOU USANDO CLIP 53

estou testando se o diretorio c:\GDRAIS2007\GDRAIS2007.EXE
existe --- o wapi ou tal
ou LF_DIRETORY() -- ACHARIA ESTE ARQUIVO
------- OU NO CLIP53 I - TEM ALGO NOVO

ESTOU USANDO RUN DIR
------------
TEM ALGO FACIL E PRATICO

Enviado: 15 Fev 2008 13:08
por Clipper
Apesar da pergunta ser para o Maligno, vou tomar a liberdade de responder.

Você deve usar a função LF_ISFILE()

Exemplo :

Código: Selecionar todos

MDIR="C:\GDRAIS2007\GDRAIS2007.EXE"
IF LF_ISFILE(MDIR,.F.)=.T.
    @ 00,00 SAY "Diretório/Arquivo encontrados"
ELSE
    @ 00,00 SAY "Tem não !"
ENDIF

ou

MDIR="C:\GDRAIS2007"
IF LF_ISFILE(MDIR,.T.)=.T.
    @ 00,00 SAY "Diretório encontrado"
ELSE
    @ 00,00 SAY "Tem não !"
ENDIF

Até encontrei uma função que uso num programinha besta que fiz

*------------------------*
 FUNCTION VERPASTA(PPESQ)
*------------------------*
IF LF_ISFILE(ALLTRIM(PPESQ),.T.)=.F.                       // LFN LIB 
   MSG("Caminho "+ALLTRIM(PPESQ)+" nao encontrado !",2)
   RETURN(.F.)
ENDIF
RETURN(.T.)
O segundo parâmetro da função serve para especificar se o que deve ser procurado é um arquivo ou diretório, se .F. deve ser um arquivo, se .T. deve ser um diretório.

Se quiser ver o programinha besta que falei, ele serve para renomear arquivos MP3, fiz ele porque acho um saco ficar renomenado pelo Windows (é muito lerdo) e os arquivos que vem pelo emule vem com cada nome !

www.phrep.com.br/mp3ren.zip
Ah ! Ele ainda toca a música se quiser, mas aí foi uma gambiarra que eu fiz, mas funciona ! :)) :)) :)) :))
Até logo.

Marcelo

RESP

Enviado: 18 Fev 2008 11:04
por tonyx
*** COLOQUEI ASSIM E DEU CERTO ****
**** PERGUNTA ?? ISSO E SOLUÇÃO DIGNA ?? ABSOLETA, SEJA ??

Código: Selecionar todos

ANO_BASE:= '2007'
DIR_LER:= 'C:\'
DIR_PESQ:= 'GDRAIS2007'
ARQ_PESQ:= 'GDRAIS2007.EXE'
DIR_RAIS:= '?'

function FACHARAIS

 ACHEI:= .F.
 tst_dir1:= 'C:\TST_DIR1.DAT'
 tst_dir2:= 'C:\TST_DIR2.DAT'
 ERASE(TST_DIR1)
 ERASE(TST_DIR2)
 *-----------------
 ARQ_PESQ2:= DIR_LER+DIR_PESQ+'\'+ARQ_PESQ
 CMD_RAIS1:= 'CMD.EXE /C DIR '+ARQ_PESQ2+' /B > '+TST_DIR1
 RUN &CMD_RAIS1
 arq_ler:= memoread(TST_DIR1)
 linha_PESQ:= upper(alltrim(memoline(arq_ler,80,1,1,.t.) ) )
 IF LINHA_PESQ = ARQ_PESQ
  ACHEI:= .T.
  DIR_PESQ2:= DIR_LER+DIR_PESQ+'.*'
  CMD_RAIS2:= 'CMD.EXE /C DIR '+DIR_PESQ2+' /AD /X > '+TST_DIR2
  RUN &CMD_RAIS2
  arq_ler:= memoread(TST_DIR2)
  t_linhas:= mlcount(arq_ler,80,1,.t.)
  for i = 1 to t_linhas
   linha:= upper(alltrim(memoline(arq_ler,80,i,1,.t.) ) )
   POS1:= at(' <DIR> ',linha)
   POS2:= at(DIR_PESQ,linha)
   if POS1 > 0 .and. POS2 > 0
    T_LINHAS:= T_LINHAS + 100
    LINHA:= ALLTRIM(SUBSTR(LINHA,POS1+7,80))
    POS2:= AT(' ',LINHA)
    LINHA:= ALLTRIM(SUBSTR(LINHA,1,POS2))
    DIR_RAIS:= DIR_LER+LINHA
   endif
  next
 endIF
return(ACHEI)

Enviado: 18 Fev 2008 11:21
por Clipper
Prezado Colega.

Digna ? Sim, na minha opnião sim, já que ela funciona, só usa mais código além de maior uso de memória, mas não deixa de ser uma solução.

Obsoleta ? Sim. Pois a LFN LIB veio justamente pra suprir essa necessidade.

Mas se ela funciona e te dá o resultado esperado é válida.

Exemplo :

Código: Selecionar todos

FOR I=0 TO 24
       @ I,00 CLEAR TO I,79
NEXT

ou

CLS

Dão o mesmo resultado, só que usam maneiras diferentes para fazer isso, como diria Napoleão Bonaparte "cada um com seu cada um..."

Até logo.

Marcelo

Enviado: 18 Fev 2008 11:24
por Pablo César
Tonyx, eu não testei seu exemplo, mas pelo que me parece isso não irá funcionar em WIN98. Bom seria aprsentar algo que funcionasse em qualquer versão do Windows. Mas a idéia de utilizar o comando DIR do DOS com opção /S para opção de procura é rudimentar mas funciona.

Acho que sempre é válido buscar onde se pressume estar determinado arquivo e sel ele não estiver lá, daí dar uma opção ao usuário de busca no disco inteiro. Claro que desta forma seria uma operação que demoraria um pouco a ser obtetido.

Outra forma de comparar de dentro da aplicação Clipper, seria transformar esse nome longo em nome curto.

Obs.: Tonyx, tenho a impressão que você não está re-avaliando a variável ACHEI no seu código exemplo. PERDÃO, agora ví que SIM. (desconsidere esta OBS)

Enviado: 18 Fev 2008 12:53
por Pablo César
Vendo a LIB apresentada pelo colega Marcelo em https://pctoledo.org/forum/viewtopic.php?t=7549 ví que tem umas funções de procura com exemplos (veja o NG que acompanha) como LF_FINDFIRST, FINDNEXT, ISFILE.... que possam servir o mesmo propósito.