Clipper On Line • Ver Tópico - Windows XP e Directory() com espaços

Windows XP e Directory() com espaços

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

Moderador: Moderadores

 

Windows XP e Directory() com espaços

Mensagempor JoséQuintas » 04 Abr 2018 02:29

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)

   cPath := [h:\"Documentos Locação"\"Fotos Imóveis"\"Fotos Imóveis"\]
   aFiles := Directory( cPath + "*.*" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Windows XP e Directory() com espaços

Mensagempor Kapiaba » 04 Abr 2018 11:30

Tente assim:


         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.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Windows XP e Directory() com espaços

Mensagempor JoséQuintas » 07 Abr 2018 14:04

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

#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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Windows XP e Directory() com espaços

Mensagempor Claudio Soto » 07 Abr 2018 14:48

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
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Windows XP e Directory() com espaços

Mensagempor Kapiaba » 09 Abr 2018 11:07

/*
*   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"
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro