realbasic-nug.fr
[Top] [All Lists]

Re: Comment effacer le contenu d'un dossier ?

To: REALbasic NUG French <realbasic-nug dot fr at lists dot realsoftware dot com>
Subject: Re: Comment effacer le contenu d'un dossier ?
From: Powel <compute at e-topics dot net>
Date: Thu, 29 Nov 2007 09:38:16 +0100
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot fr at lists dot realsoftware dot com
References: <67802462-1D6A-495A-B74B-C50AD280482D at e-topics dot net> <82D7687E-7138-4414-8656-A4EBC6E6076E at mac dot com> <4279B341-329D-44A6-8189-F01E76CE0219 at mac dot com>
J'ai aussi remarqué que RB ne supporte pas bien la récursivité et génère rapidement des stackoverflow. Alors merci Arnaud pour cette proposition intéressante et originale. J'en prends note.

Powel



Le 29 nov. 07 à 00:01, Arnaud Nicolet a écrit :

Le 28 nov. 07 à 20:09 soir, Arnaud Nicolet a écrit:

Une autre méthode consiste à utiliser une boucle et des variables de type tableau (on ajoute le dernier dossier trouvé dans une variable du genre MyFoldersToTreat() As FolderItem). Je suis en train de rechercher dans mon code. Quand j'aurai trouvé, je vous ferai une nouvelle réponse.

Voilà, Powel, je n'ai pas trouvé le code dans mes fichiers mais ce n'est pas trop dure à faire. En fait, il faut recopier la récursivité sans appeler d'autres méthodes (la mémoire allouée aux appels des méthodes sature beaucoup plus vite que la mémoire de l'application, même si je n'utilise peut- être pas les termes adéquats).

Une sorte d'exemple (pour le plaisir de coder):

 dim f As FolderItem
 dim g As FolderItem
 dim Dossiers() As FolderItem 'Liste des dossiers à traiter
 dim i() As Integer 'Chaque valeur où on en est dans chaque dossier
dim j As integer 'Pour ne pas utiliser "UBound" à chaque fois, on utilise une variable
 dim k As integer
 dim s As String

 f=File
 Dossiers.Append f
 i.Append 1
 j=0

 do
   if UBound(Dossiers)=-1 then exit
   f=Dossiers(j)
   k=i(j)

   if k<=f.count then
     g=f.trueItem(k)
     s=g.AbsolutePath
     if g.Directory then
//c'est un dossier. On l'ajoute à la liste et le code va tout seul s'occuper de celui-ci (donc on descend le plus possible)
       Dossiers.Append g
       i.append 1 'On commencera au 1er élément
       j=j+1
     else
       g.delete
       if g.Exists and i>-1 then
         i(j)=i(j)+1
       end if
     end if
else 'k>f.count, on dépasse le nombre de fichiers (ce n'est pas une boucle "for-next"!)
     Dossiers.remove j
     i.remove j
     f.delete
     j=j-1
     if f.Exists and i>-1 then
       i(j)=i(j)+1
     end if
   end if
 loop



<Prev in Thread] Current Thread [Next in Thread>