Windows XP e Directory() com espaços

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Windows XP e Directory() com espaços

Mensagem por JoséQuintas »

Retornaram algumas máquinas de W7 pra XP, e a opção de pesquisar na pasta foi perdida.
A alternativa que pensei foi fazer pelo aplicativo, mas ....
Alguma idéia de como fazer isto funcionar no Windows XP ?
(Ou outros, não testei em outros Windows)

Código: Selecionar todos

   cPath := [h:\"Documentos Locação"\"Fotos Imóveis"\"Fotos Imóveis"\]
   aFiles := Directory( cPath + "*.*" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Windows XP e Directory() com espaços

Mensagem por Kapiaba »

Tente assim:

Código: Selecionar todos


         cArq  := ""
         cExt  := ""
         cPath := ""

         //cPath := cDirExe+"UNIDANFE\EMAIL\ANEXOS\"

         cPath := "H:\Documentos Locação\Fotos Imóveis\Fotos Imóveis\"

         cFile := "*.*"

         // RECURSIVE
         aFile := DIRECTORYRECURSE( cPath + cFile )

         If Len(aFile)==0

            cPdfNFeUni := ""

         Else

            For nI := 1 to Len( aFile )

               hb_FNameSplit( aFile[nI,1], @cPath, @cArq, @cExt )

               ? cPath+" "+cArq+" "+cExt+" Perfeito!"

            Next

            aFiles := ALLTRIM( cPath+cArq+cExt )

         EndIf
Abs.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Windows XP e Directory() com espaços

Mensagem por JoséQuintas »

Lembrando que vai ser só pra XP, por não ter o mesmo recurso do W10.
Falta testar nele.

Código: Selecionar todos

#include "directry.ch"
#include "inkey.ch"

PROCEDURE HLPESQDOCXP

   LOCAL cFile, cPath, cTexto := Space(50), GetList := {}

   cPath := "d:\temp\Documentos Locação\Fotos Imóveis\Fotos Imóveis\"

   DO WHILE .T.
      @ 2, 5 SAY "Texto a pesquisar:" GET cTexto PICTURE "@!"
      READ
      IF LastKey() == K_ESC
         EXIT
      ENDIF
      cFile := win_GetOpenFileName(, "Foto", cPath, "Foto", "*" + Trim( cTexto ) + "*", 1 )

   ENDDO

   RETURN
Acredito que possa ser problema de codepage, e talvez renomear pastas funcione também.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Windows XP e Directory() com espaços

Mensagem por Claudio Soto »

Si no me equivoco la función Directory trabaja con path cortos sin espacios ni caracteres especiales.
Hay que usar la función del api de Windows GetShortPathName para convertir de path largo a el equivale corto, algo asi:

#include <windows.h>
#include <tchar.h>
#include "hbapi.h"

HB_FUNC ( LONG2SHORTPATH )
{
TCHAR *cLongPath = hb_parc (1);
TCHAR *cShortPath [ 2048 ];

GetShortPathName( cLongPath, cShortPath, sizeof( cShortPath ) / sizeof( TCHAR ) );

hb_retc( cShortPath );
}
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Windows XP e Directory() com espaços

Mensagem por Kapiaba »

Código: Selecionar todos

/*
 *	SPN.PRG
 *
 *	cShortName() - FilePath Long to Short (GetShortPathNameA())
 *
 *	Soporte a Funciones del Api de Windows
 *
 *	Andrade A. Daniel - 2002
 *	Rosario, Argentina
 *
 *	Libre Distribución
 */

/*
 *	cShortName()
 */

FUNCTION cShortName( cLong )

    Local   cShort  := Space(164) + Chr(0)
    Local   nBuffer := 164
    Local   nLen

    nLen    := GetSPName( cLong, @cShort, nBuffer )

    cShort  := Left( cShort, nLen )

RETURN( cShort )

// Windows Api
DLL32 STATIC FUNCTION GetSPName( lpszLongPath AS STRING, lpszShortPath AS STRING, lBuffer AS LONG ) ;
      AS LONG PASCAL FROM "GetShortPathNameA" LIB "kernel32"
Responder