Page 1 sur 1

[RESOLU] Fonctions récursives

Publié : sam. 14/avr./2012 19:34
par nico
J'ai résolu le problème!, le code ci dessous à été corrigé :)

J'ai un problème, je n'arrive pas à créer une fonction récursive pour le problème que j'ai, dont voici le code qui fonctionne avec Comate!
Le code permet de lister le contenu d'un zip
pour le test, il faut que le zip contienne des fichiers, des répertoires et des sous répertoires et sous fichiers!

Help me :?

Code : Tout sélectionner

IncludePath "..\"
XIncludeFile "COMatePLUS.pbi"

Define.COMateObject objShell, SrcFldr

Procedure enum2(SrcFldr.comateobject, item.l)
  Static Dim FolderItems.COMateObject(1000), Dim FolderItem.COMateObject(1000)
  Static Dim a.l(1000), Dim count.l(1000)
  Protected Folder.COMateObject, file.s
    
  FolderItems(item)=SrcFldr\GetObjectProperty("Items")
  SrcFldr\release()
  Debug "FolderItems "+Str(item)
  
  count(item)=FolderItems(item)\GetintegerProperty("Count")
  a(item)=0
  
  While a(item)<count(item) 
    FolderItem(item)= FolderItems(item)\GetObjectProperty("Item("+Str( a(item))+ " as long)")
    If FolderItem(item)
      file= FolderItem(item)\GetStringProperty("Name")
      Debug file
      If FolderItem(item)\GetintegerProperty("IsFolder")=-1 ; teste si c'est un répertoire
        Folder=FolderItem(item)\GetObjectProperty("GetFolder")       
        If folder
          item= enum2(folder, item+1)
        EndIf 
      EndIf 
      FolderItem(item)\release()
    EndIf 
    a(item)=a(item)+1
  Wend  
  FolderItems(item)\release()

  ProcedureReturn (item-1)
EndProcedure

objShell = COMate_CreateObject("Shell.Application")

If objShell
  SrcFldr = objShell\GetObjectProperty("NameSpace('C:\Users\nico\Desktop\popo.zip')") ; remplacer le par votre zip !
  Debug comate_getlasterrordescription()
  enum2(SrcFldr,0)
  objShell\Release()
EndIf 

Re: Fonctions récursives

Publié : sam. 14/avr./2012 21:05
par nico
Petite correction sur le code mais ça marche toujours pas!

Re: Fonctions récursives

Publié : sam. 14/avr./2012 22:49
par Backup
chez moi il affiche bien les dossiers contenu dans les dossiers ....

c'est quoi concrètement le dezipage , pour voir s'il peut deziper ?

( mon arbo c'est : Dossier1\dossier2\dossier3\ et 4 fichiers dedans )

voici :
[23 :49 :56] Okay.
[23 :49 :56] a= 0
[23 :49 :56] count= 1
[23 :49 :56] item= 0
[23 :49 :56] 62588976
[23 :49 :56] Okay.
[23 :49 :56] 0
[23 :49 :56] dossier1
[23 :49 :56] a= 0
[23 :49 :56] count= 1
[23 :49 :56] item= 1
[23 :49 :56] 62589040
[23 :49 :56] Okay.
[23 :49 :56] 0
[23 :49 :56] dossier 2
[23 :49 :56] a= 0
[23 :49 :56] count= 1
[23 :49 :56] item= 2
[23 :49 :56] 62589104
[23 :49 :56] Okay.
[23 :49 :56] 0
[23 :49 :56] dossier 3
[23 :49 :56] a= 0
[23 :49 :56] count= 4
[23 :49 :56] item= 3
[23 :49 :56] 62589168
[23 :49 :56] Okay.
[23 :49 :56] 0
[23 :49 :56] COMatePLUS.pbi
[23 :49 :56] a= 1
[23 :49 :56] count= 4
[23 :49 :56] item= 3
[23 :49 :56] 62589168
[23 :49 :56] An exception occurred during the execution of this method/property.
[23 :49 :56] 0
[23 :49 :56] a= 2
[23 :49 :56] count= 4
[23 :49 :56] item= 3
[23 :49 :56] 62589168
[23 :49 :56] An exception occurred during the execution of this method/property.
[23 :49 :56] 0
[23 :49 :56] a= 3
[23 :49 :56] count= 4
[23 :49 :56] item= 3
[23 :49 :56] 62589168
[23 :49 :56] An exception occurred during the execution of this method/property.
[23 :49 :56] 0
[23 :49 :56] item= 2
[23 :49 :56] item= 1
[23 :49 :56] item= 0

Re: Fonctions récursives (Résolu)

Publié : sam. 14/avr./2012 23:07
par Backup
ok ça affiche chez moi :) :
[00 :06 :28] Okay.
[00 :06 :28] FolderItems 0
[00 :06 :28] dossier1
[00 :06 :28] FolderItems 1
[00 :06 :28] dossier 2
[00 :06 :28] FolderItems 2
[00 :06 :28] dossier 3
[00 :06 :28] FolderItems 3
[00 :06 :28] COMatePLUS.pbi
[00 :06 :28] COMatePLUS_Residents.pbi
[00 :06 :28] test.pb
[00 :06 :28] VariantHelper_Include.pb

Re: Fonctions récursives (Résolu)

Publié : sam. 14/avr./2012 23:08
par nico
Pour voir le problème, il fallait à chaque fois mettre dossier et fichiers.

Je te remercie, j'ai corrigé le problème.

Ce code va me servir à dézipper seulement les fichiers suivant un filtre.

En ce moment, j'ai un code qui utilise une fonction de dézippage (lib de gnozal) mais elle est pas compatible 64 bits, alors je préfère utiliser la fonction de window et ça m'enlève une dépendance!

Re: Fonctions récursives (Résolu)

Publié : sam. 14/avr./2012 23:09
par Backup
bon , ben cool , que ça marche a++ :)