FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Buscar un archivo en un disco y sus directorios
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Buscar un archivo en un disco y sus directorios
Posted: Tue Mar 26, 2019 09: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 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: 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
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: Wed Mar 27, 2019 04: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 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: Wed Mar 27, 2019 11:11 AM
No me habia dado cuenta del detalle de que sigues utilizando xHarbour
Aqui tienes el source
Code (fw): Select all Collapse
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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: Thu Mar 28, 2019 05:19 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: Thu Mar 28, 2019 05:38 PM
Excelente, más solo funciona con Harbour.

Code (fw): Select all Collapse
#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
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: Buscar un archivo en un disco y sus directorios
Posted: 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 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m

Continue the discussion