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

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

caputo
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 29 Out 2007 08:39
Localização: Olímpia/SP

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

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
caputo
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 29 Out 2007 08:39
Localização: Olímpia/SP

Mensagem 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?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
caputo
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 29 Out 2007 08:39
Localização: Olímpia/SP

Mensagem 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 !
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

nome de diretorio e nome de arquivo

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

RESP

Mensagem 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)
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder