Buscar un archivo en un disco y sus directorios

Buscar un archivo en un disco y sus directorios

Postby Enrrique Vertiz » Tue Mar 26, 2019 9:39 pm

Saludos estimados

No se si existe en FWH o en xHB alguna funcion que realice la busqueda de un archivo en una unidad y sus directorios y subdirectorios ?? si alguien tiene el dato o alguna funcion se lo agradecere ...
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Enrrique Vertiz
 
Posts: 541
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru

Re: Buscar un archivo en un disco y sus directorios

Postby cnavarro » Tue Mar 26, 2019 10:16 pm

Prueba con

Xbrowse( HB_DirScan( "C:\", "mifile.txt", "A" ) )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buscar un archivo en un disco y sus directorios

Postby Enrrique Vertiz » Wed Mar 27, 2019 4:06 am

Saludos, GRACIAS efectivamente es los que necesito, pero hay un problema, es de Harbour y Yo uso xHarbour, estuve buscando la equivalencia en xHb pero no la encuentro, existira ??
Gracias nuevamente.
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Enrrique Vertiz
 
Posts: 541
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru

Re: Buscar un archivo en un disco y sus directorios

Postby cnavarro » Wed Mar 27, 2019 11:11 am

No me habia dado cuenta del detalle de que sigues utilizando xHarbour
Aqui tienes el source
Code: Select all  Expand view

https://github.com/harbour/core/blob/master/src/rtl/dirscan.prg
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buscar un archivo en un disco y sus directorios

Postby karinha » Thu Mar 28, 2019 5:19 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7822
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Buscar un archivo en un disco y sus directorios

Postby karinha » Thu Mar 28, 2019 5:38 pm

Excelente, más solo funciona con Harbour.

Code: Select all  Expand view

#include "FiveWin.ch"
#include "directry.ch"
#include "fileio.ch"

PROC TestDScan()

   LOCAL aFFList := HB_DirScan( "C:\TEMP" )
   LOCAL x1Row

   /*
   FOR EACH x1Row IN aFFList

      ? PAD( x1Row[ 1 ], 23 ), ;                     // Name
        TRAN( x1Row[ 2 ], '999,999,999,999' ), ;     // Size
        x1Row[ 3 ], ;                                // Date
        x1Row[ 4 ], ;                                // Time
        x1Row[ 5 ]                                   // Attributes
   NEXT x1Row
   */


   Xbrowse( HB_DirScan( "C:\TEMP", "TESTE", "A" ) )

RETURN NIL // TestDScan()

STATIC FUNCTION hb_doScan( cPath, cMask, cAttr, cPathSep )

   LOCAL aFile
   LOCAL lMatch
   LOCAL aResult := {}

   FOR EACH aFile IN hb_vfDirectory( cPath + hb_osFileMask(), cAttr + "D" )

      lMatch := hb_FileMatch( aFile[ F_NAME ], cMask )

      IF "D" $ aFile[ F_ATTR ]

         IF lMatch .AND. "D" $ cAttr
            AAdd( aResult, aFile )
         ENDIF

         IF !( aFile[ F_NAME ] == "." .OR. aFile[ F_NAME ] == ".." .OR. aFile[ F_NAME ] == "" )
            AEval( hb_DoScan( cPath + aFile[ F_NAME ] + cPathSep, cMask, cAttr, cPathSep ), ;
               {| x | x[ F_NAME ] := aFile[ F_NAME ] + cPathSep + x[ F_NAME ], ;
               AAdd( aResult, x ) } )
         ENDIF

      ELSEIF lMatch

         AAdd( aResult, aFile )

      ENDIF

   NEXT

RETURN aResult

FUNCTION hb_DirScan( cPath, cFileMask, cAttr )

RETURN hb_DoScan( hb_DirSepAdd( hb_defaultValue( cPath, "" ) ),    ;
       iif( HB_ISSTRING( cFileMask ), cFileMask, hb_osFileMask() ), ;
       hb_defaultValue( cAttr, "" ), ;
       hb_ps() )

FUNCTION hb_DirRemoveAll( cDir )

   LOCAL aFile, cPath, cFile, nAttr

   IF ! Empty( cDir ) .AND. hb_vfDirExists( cDir )
      cPath := hb_DirSepDel( cDir )
      IF hb_vfAttrGet( cPath, @nAttr ) .AND. ! hb_bitAnd( nAttr, HB_FA_READONLY ) == 0
         hb_vfAttrSet( cPath, hb_bitXor( nAttr, HB_FA_READONLY ) )
      ENDIF
      cPath := hb_DirSepAdd( cPath )
      FOR EACH aFile IN hb_vfDirectory( cPath + hb_osFileMask(), "HSDL" )
         IF "D" $ aFile[ F_ATTR ] .AND. ! "L" $ aFile[ F_ATTR ]
            IF !( aFile[ F_NAME ] == "." .OR. aFile[ F_NAME ] == ".." .OR. aFile[ F_NAME ] == "" )
               IF ! hb_DirRemoveAll( cPath + aFile[ F_NAME ] )
                  RETURN .F.
               ENDIF
            ENDIF
         ELSE
            cFile := cPath + aFile[ F_NAME ]
            IF "R" $ aFile[ F_ATTR ] .AND. hb_vfAttrGet( cFile, @nAttr )
               hb_vfAttrSet( cFile, hb_bitAnd( nAttr, hb_bitNot( HB_FA_READONLY ) ) )
            ENDIF
            IF ! hb_vfErase( cFile ) == 0
               RETURN .F.
            ENDIF
         ENDIF
      NEXT
      RETURN hb_vfDirRemove( cDir ) == 0
   ENDIF

RETURN .T.

FUNCTION hb_FileDelete( cFileMask, cAttr )

   LOCAL lAny := .F., aFile, cPath, cFile, cAttrMask, nAttr

   IF HB_ISSTRING( cFileMask ) .AND. ! Empty( cFileMask ) .AND. ;
      ! hb_vfDirExists( cFileMask )
      cPath := hb_FNameDir( cFileMask )
      cAttrMask := StrTran( hb_defaultValue( cAttr, "" ), "D" ) + "L"
      FOR EACH aFile IN hb_vfDirectory( cFileMask, cAttrMask )
         cFile := cPath + aFile[ F_NAME ]
         IF "R" $ aFile[ F_ATTR ] .AND. hb_vfAttrGet( cFile, @nAttr )
            hb_vfAttrSet( cFile, hb_bitAnd( nAttr, hb_bitNot( HB_FA_READONLY ) ) )
         ENDIF
         IF hb_vfErase( cFile ) == 0
            lAny := .T.
         ENDIF
      NEXT
   ENDIF

RETURN lAny
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7822
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Buscar un archivo en un disco y sus directorios

Postby Enrrique Vertiz » Thu Mar 28, 2019 10:32 pm

Saludos y gracias

Es correcto solo funciona en HB para xHB he tenido que usar : DirectoryRecurse() , pues trate de compilar el source pero daba muchos errores.
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 24.09, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Enrrique Vertiz
 
Posts: 541
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 60 guests