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
file() com nomes curtos
Moderador: Moderadores
-
Euclides
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 12 Mai 2007 14:07
- Localização: São Paulo, Capital
É 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
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.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
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
ReturnLeonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Euclides
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 12 Mai 2007 14:07
- Localização: São Paulo, Capital
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
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