NOme verdadeiro do arquivo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

NOme verdadeiro do arquivo

Mensagem por Mário Isa »

Bom dia,
Alguem sabe alguma função que retorne o nome-DOS do arquivo ou da pasta ?

Tipo

origem =
c:\Documents and settings\usuario 1\desktop

retorna =
c:\docume~1\usuari~1\desktop

:xau
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

NOme verdadeiro do arquivo

Mensagem por bencz »

De uma olhada na função: GetShortPathName

http://msdn.microsoft.com/en-us/library ... 85%29.aspx

(:
Editado pela última vez por Toledo em 31 Jul 2012 21:58, em um total de 2 vezes.
Razão: Mensagem editada para corrigir o link que estava quebrado
Imagem
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

NOme verdadeiro do arquivo

Mensagem por Mário Isa »

deu página não encontrada.

mesmo eu acrescentando o .aspx no final
:%
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á

NOme verdadeiro do arquivo

Mensagem por Pablo César »

Aqui tem dois exemplos de códigos, acho que o segundo está mais condizente com a atual versão do Harbour.

Código: Selecionar todos

HB_FUNC( WAPI_GETSHORTPATHNAME )
{
   void * hLongPath;
   DWORD length = 0;
   LPCTSTR lpszLongPath = HB_PARSTR( 1, &hLongPath, NULL );

   if( lpszLongPath )
   {
      if( HB_ISBYREF( 2 ) )
      {
         TCHAR buffer[ HB_PATH_MAX ];
         DWORD cchBuffer = ( DWORD ) HB_SIZEOFARRAY( buffer );
         LPTSTR lpszShortPath = buffer;
         HB_BOOL fSize = HB_ISNUM( 3 );

         if( fSize )    /* the size of buffer is limited by user */
         {
            cchBuffer = ( DWORD ) hb_parnl( 3 );
            if( cchBuffer == 0 )
               lpszShortPath = NULL;
            else if( cchBuffer > ( DWORD ) HB_SIZEOFARRAY( buffer ) )
               lpszShortPath = ( LPTSTR ) hb_xgrab( cchBuffer * sizeof( TCHAR ) 
);
         }

         length = GetShortPathName( lpszLongPath, lpszShortPath, cchBuffer );
         if( !fSize && length > cchBuffer )  /* default buffer size was too 
small */
         {
            cchBuffer = length;
            lpszShortPath = ( LPTSTR ) hb_xgrab( cchBuffer * sizeof( TCHAR ) );
            length = GetShortPathName( lpszLongPath, lpszShortPath, cchBuffer );
         }
         hbwapi_SetLastError( GetLastError() );
         HB_STORSTRLEN( lpszShortPath, length > cchBuffer ? 0 : length, 2 );
         if( lpszShortPath && lpszShortPath != buffer )
            hb_xfree( lpszShortPath );
      }
      else
      {
         length = GetShortPathName( lpszLongPath, NULL, 0 );
         hbwapi_SetLastError( GetLastError() );
      }
   }
   hb_retnl( length );
   hb_strfree( hLongPath );
}

Código: Selecionar todos

#include "hbwapi.h"

HB_FUNC( WAPI_GETSHORTPATHNAME )
{
#if !defined( HB_OS_WIN_CE )
   s_getPathName( GetShortPathName );
#else
   {
      HB_SIZE nSize = hb_parclen( 1 );
      hb_storclen( hb_parc( 1 ), nSize, 2 );
      hb_retns( nSize );
   }
#endif
}
Em Minigui tem _GetShortPathName e na pasta C:\MiniGUI\SAMPLES\BASIC\Paths tem um bom exemplo de uso inclusive de uso de modo sintético, aquele com ... (pontinhos). Deixo aqui o executável com o fonte em anexo, espero que sirva de exemplo.
Anexos
Paths.rar
(465.5 KiB) Baixado 90 vezes
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.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

NOme verdadeiro do arquivo

Mensagem por Mário Isa »

Qual .LIB está a função
_GETSHORTNAME ?

Seria a libminigui.a ?

Esse .a é a .LIB no HMG ?

Mário

:-´
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á

NOme verdadeiro do arquivo

Mensagem por Pablo César »

Qual .LIB está a função
_GETSHORTNAME ?
É da Harbour MiniGUI Extended e está em minigui.lib
Esse .a é a .LIB no HMG ?
A lib que HMG possui a função é libhbwin.a e utiliza o WAPI_GETSHORTPATHNAME, eis um exemplo:

Código: Selecionar todos

#include <hmg.ch>

Function Main
Local fns:=""
WAPI_GETSHORTPATHNAME("C:\Arquivos de programas\Mozilla Maintenance Service",@fns)
MsgInfo(fns)
Return
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.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

NOme verdadeiro do arquivo

Mensagem por Mário Isa »

fui na pasta
c:\hmg
e suas sub's

nao achei nem o hmg.ch
nem o
libhbwin.a

Vc sabe onde conseguir ?
;-*
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á

NOme verdadeiro do arquivo

Mensagem por Pablo César »

Não sei qual é a versão que possui, mas eu achei em: C:\hmg.3.0.41\HARBOUR\lib\win\mingw

Anexei a biblioteca para a sua comidade.
Anexos
libhbwin.rar
(86.51 KiB) Baixado 82 vezes
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