Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 20-11-2012 12:07:31

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

[SOURCE] Liste des fichier d'un répertoire et des ses sous répertoires

à FDEC pour son script

Voici une petite fonction qui permet de récupérer tous les fichier d'un répertoire et de ses sous répertoires

Code: pb

Long ll_cnt,ll_temp
str_files lstr_parms,lstr_temp
OLEObject obj_shell, obj_folder, obj_items, obj_item

IF DirectoryExists( as_folder ) THEN
    //initiate the shell object
    obj_shell = CREATE OLEObject
    obj_shell.ConnectToNewObject( 'shell.application' )

    IF IsValid( obj_shell ) THEN
        //assign folder object
        obj_folder = obj_shell.NameSpace( as_folder )
        
        IF IsValid( obj_folder ) THEN
            //assign objects from that folder
            obj_items = obj_folder.Items
            
            IF IsValid( obj_items ) THEN
                //loop through items (zero-indexed)
                FOR ll_cnt = 0 TO obj_items.Count
        //assign individual item
          obj_item = obj_items.Item( ll_cnt )
      IF IsValid( obj_item ) THEN
        IF obj_item.IsFolder THEN
          //Recursive Functions calls
          lstr_temp = This._GetFiles( obj_item.Path)
          FOR ll_temp = 1 TO UpperBound( lstr_temp.as_file )
            //add to list
            lstr_parms.as_file[ UpperBound( lstr_parms.as_file ) + 1 ] = lstr_temp.as_file[ ll_temp ]
          NEXT      
        Else
          //add to list
          lstr_parms.as_file[ UpperBound( lstr_parms.as_file ) + 1 ] = obj_item.Path
         End if
      END IF          
                NEXT
            END IF
        END IF
    END IF
END IF

//clear memory
DESTROY obj_shell
DESTROY obj_folder
DESTROY obj_items
DESTROY obj_item

RETURN lstr_parms

Il suffit de faire une datastore pour filtrer sur une extension :

Code: pb

Long ll_cnt, ll_temp,ll_loop,ll_insert,ll_pos_filename,llengthextension
str_files lstr_parms, lstr_temp,lstr_final
OLEObject obj_shell, obj_folder, obj_items, obj_item
Datastore lds_files

lds_files = Create DataStore
lds_files.DataObject = 'd_ds_files'

lstr_parms = This._GetFiles(as_folder)

llengthextension = Len(Trim(as_extension))

//Create a datastore to filter with extension
For ll_loop = 1 To UpperBound(lstr_parms.as_file[])
  ll_insert = lds_files.InsertRow(0)
  lds_files.SetItem(ll_insert,'filepath',lstr_parms.as_file[ll_loop])
  lds_files.SetItem(ll_insert,'fileext',Right(lstr_parms.as_file[ll_loop],llengthextension))
  ll_pos_filename = Len(Trim(as_folder)) + 2
  lds_files.SetItem(ll_insert,'filename',Mid(lstr_parms.as_file[ll_loop],ll_pos_filename))
Next

//Filter with the specified extension
If Trim(as_extension) <> '' Then
  lds_files.SetFilter("Trim(Lower(fileext)) = '"+Trim(Lower(as_extension))+"'")
  lds_files.Filter()
End if

If lds_files.RowCount() > 0 Then
  For ll_loop = 1 To lds_files.RowCount()
    lstr_final.as_file[ll_loop] = Trim(lds_files.GetItemString(ll_loop,'filename'))
    lstr_final.as_filePath[ll_loop] = Trim(lds_files.GetItemString(ll_loop,'filepath'))
    lstr_final.as_extension[ll_loop] = Trim(lds_files.GetItemString(ll_loop,'fileext'))
  Next
End if

Destroy lds_files

lstr_parms = lstr_final

//return list
RETURN lstr_parms

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#2 20-11-2012 12:09:04

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [SOURCE] Liste des fichier d'un répertoire et des ses sous répertoires

Au passage, tu aurais la déclaration de la structure str_files pour être tout à fait complet ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22