[RESOLU] Fonctions récursives

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

[RESOLU] Fonctions récursives

Message 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 
Dernière modification par nico le sam. 14/avr./2012 23:03, modifié 2 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Fonctions récursives

Message par nico »

Petite correction sur le code mais ça marche toujours pas!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Fonctions récursives

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Fonctions récursives (Résolu)

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Fonctions récursives (Résolu)

Message 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!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Fonctions récursives (Résolu)

Message par Backup »

bon , ben cool , que ça marche a++ :)
Répondre