Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
à 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
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 :
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
Hors ligne
Au passage, tu aurais la déclaration de la structure str_files pour être tout à fait complet ?
Hors ligne
Pages: 1