Página 1 de 1

Windows XP e Directory() com espaços

Enviado: 04 Abr 2018 02:29
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 + "*.*" )

Windows XP e Directory() com espaços

Enviado: 04 Abr 2018 11:30
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.

Windows XP e Directory() com espaços

Enviado: 07 Abr 2018 14:04
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.

Windows XP e Directory() com espaços

Enviado: 07 Abr 2018 14:48
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 );
}

Windows XP e Directory() com espaços

Enviado: 09 Abr 2018 11:07
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"