PB à toute heure et à tout moment. (à parcourir avec modération)

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