file() com nomes curtos

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

file() com nomes curtos

Mensagem por Euclides »

Olá pessoal!
Tenho algumas dificuldades para guardar em campos de arquivos os nomes de documentos e por isso, estou utilizando a função LFN2SFN (só funciona direito a partir da versão 2.4).
Só que se nas primeiras posições do nome do arquivo tiver um vogal acentuado, (ex: ARQÚIV~1.DOC) o FILE("ARQÚIV~1.DOC") retorna .F.
embora o arquivo esteja lá e as rotinas de ShellExecute e OLE abram normalmente.
Alguém já pasou por isso ?
[]´s
Euclides
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Tente colocar o caminho completo.
Ex: file("c:\meus_arquivos_\temp\ARQÚIV~1.DOC")
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Mensagem por Euclides »

É Leonardo... não é tão fácil assim...
Na verdade, eu faço assim: Guardo o nome do arquivo...

ARQ->campo:=lfn2sfn(cGetFile32( "MsWord (*.doc)| *.doc", "Selecione", 1, "C:", .F., 1))

...depois em outra ocasião, verifico se ela existe e faço abrir no MSWord.

if file(ARQ->campo)
ShellExecute( 0, 'Open', cFile,,,1)
else
MsgInfo(cFileName(cFile), "Não Encontrado") // apresenta só o nome do arquivo
endif

O file(), nunca vai ´achar´ um arquivo com vogais acentuados, mas se eliminar o IF FILE(cFile), o ShellExecute abre o MSWord normalmente.
É o que estot fazendo agora... mas não é muito seguro...
Grato pelo intertesse
Euclides
Editado pela última vez por Euclides em 23 Out 2007 11:14, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Código: Selecionar todos

Procedure OpenDoc( cDoc )  // ABRE WORD
Local oWord
Local oTexto
oWord:=TOleAuto():New( "Word.Application" )
IF EMPTY(cDoc)
    RETURN
ENDIF
oWord:Documents:Open( cDoc )
oWord:Visible := .T.
oWord:Set( "WindowState", 1 ) // Abre Maximizado
Return
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Mensagem por Euclides »

Olá gente...
Eu estava ´na luta´ e não pude chegar antes...
Editei o meu POST anterior porque tinha um erro:
Isso não funciona: ARQ->campo:=cfile=lfn2sfn(cGetFile32( "MsWord (*.doc)| *.doc", "Selecione", 1, "C:", .F., 1))

A função: file("ÁRQUIVO.TXT") não vai ´achar´ o arquivo ÁRQUIVO.TXT, mesmo que ela ´embaixo do nariz´ (deve ser resquício dos caracteres inválios em nomes de arquivos do DOS)

Um fato curioso é que no SERVER 2003, o arquivo ÁRQUIVO.TXT é ´tradizido´ pela função lfn2sfn() em RQUIVO~1.TXT, que é ´encontrado´ pela função file()... coisas da vida.
Até mais...
Euclides
Responder