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.