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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 1914
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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 568
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: 1914
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