Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2705 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VB6 : Cette fonction a besoin d'une correction.. help !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VB6 : Cette fonction a besoin d'une correction.. help !

n°131520
Un4GivN
Posté le 26-04-2002 à 21:37:46  profilanswer
 

Sub RecurseTree(CurrentPath$)
    Dim i, n
    Dim FileName$, DirectoryList$()
    FileName$ = Dir(CurrentPath$)
    Do While FileName$ <> ""
        Print #1, CurrentPath$ & FileName$
        FileName$ = Dir
Loop
FileName$ = Dir(CurrentPath$, vbDirectory)
Do While FileName$ <> ""
    If FileName$ <> "." And FileName$ <> ".." Then
        If GetAttr(CurrentPath$ & FileName$) And vbDirectory Then
        n = n + 1
        ReDim Preserve DirectoryList$(n)
        DirectoryList$(n) = CurrentPath$ & FileName$
        End If
    End If
    FileName$ = Dir
    Loop
For i = 1 To n
    RecurseTree DirectoryList$(i) & "\"
Next i
End Sub
 
Je lui passe un path en paramètre, mais à la ligne : If FileName$ <> "." And FileName$ <> ".." Then    , ça plante toujours ! J'ai pourtant prit le code sur le net et il marchait. Là je suis sur winXP et on dirait qu'il ne reconnait pas le répertoire "." et ".." .. quelqu'un aurait une idée ? Par quoi remplacer cela ? Pour tester si le string lu est un rep ?

mood
Publicité
Posté le 26-04-2002 à 21:37:46  profilanswer
 

n°131531
Ventilo
Ventilo? Depuis 1998!
Posté le 26-04-2002 à 22:22:54  profilanswer
 

Premièrement je dois dire que c un code dégueulasse, déclarer des variables sans type c'est vraiment pas bien  :non: On dirait que la personne qui a codé ca vien du monde de qbasic  :sarcastic:  
 
Puis la fonction fonctione très bien si tu met un "\" à la fin du dossier que tu passe en paramètre ex: RecurseTree ("c:\musique\" )
 
J'ai remis le code en état (:D) et c'est cela que ca donne:

Code :
  1. Sub RecurseTree(CurrentPath As String)
  2.    Dim i as long, n as long
  3.    Dim FileName As String, DirectoryList() As String
  4.    FileName = Dir(CurrentPath)
  5.    Do While FileName <> ""
  6.         Print CurrentPath & FileName
  7.        FileName = Dir
  8.     Loop
  9.     FileName = Dir(CurrentPath, vbDirectory)
  10.     Do While FileName <> ""
  11.         Debug.Print CurrentPath & FileName
  12.             If FileName <> "." And FileName <> ".." Then
  13.                 If GetAttr(CurrentPath & FileName) And vbDirectory Then
  14.                     n = n + 1
  15.                     ReDim Preserve DirectoryList(n)
  16.                     DirectoryList(n) = CurrentPath & FileName
  17.                 End If
  18.             End If
  19.        FileName = Dir
  20.     Loop
  21.     For i = 1 To n
  22.        RecurseTree DirectoryList(i) & "\"
  23.     Next i
  24. End Sub

 

[jfdsdjhfuetppo]--Message édité par Ventilo le 26-04-2002 à 22:23:38--[/jfdsdjhfuetppo]

n°131546
El Scorcho
Posté le 26-04-2002 à 23:11:06  profilanswer
 

Petite remarque pour faire mon malin : dim FileName$ et dim FileName as String ça revient exactement au même... Le fait de mettre en $ enfin de variable revient à la déclarer de type String.

n°131598
Ventilo
Ventilo? Depuis 1998!
Posté le 27-04-2002 à 07:41:19  profilanswer
 

El Scorcho a écrit a écrit :

Petite remarque pour faire mon malin : dim FileName$ et dim FileName as String ça revient exactement au même... Le fait de mettre en $ enfin de variable revient à la déclarer de type String.  




 
Oui mais je trouve ca moin beau :lol: et surtout moin explicit à la déclaration... question de goût je crois  :)

 

[jfdsdjhfuetppo]--Message édité par Ventilo le 27-04-2002 à 07:42:06--[/jfdsdjhfuetppo]

n°132473
Un4GivN
Posté le 29-04-2002 à 20:38:37  profilanswer
 

Dans un module
---------------------------------
Sub RecurseTree(CurrentPath As String)
  Dim i As Long, n As Long
  Dim FileName As String, DirectoryList() As String
 
  FileName = Dir(CurrentPath)
 
  Do While FileName <> ""
       Write #30, CurrentPath & FileName
      FileName = Dir
   Loop
 
   FileName = Dir(CurrentPath, vbDirectory)
 
   Do While FileName <> ""
       Write #30, CurrentPath & FileName
           If FileName <> "." And FileName <> ".." Then
               If GetAttr(CurrentPath & FileName) And vbDirectory Then
                   n = n + 1
                   ReDim Preserve DirectoryList(n)
                   DirectoryList(n) = CurrentPath & FileName
               End If
           End If
      FileName = Dir
   Loop
 
   For i = 1 To n
      RecurseTree DirectoryList(i) & "\"
   Next i
End Sub
 
 
--------------------------------------
Private Sub Faire_Liste_Click()
Dim StartPath$
StartPath$ = Dir1.Path
Open App.Path & "\" & Text1.Text For Output As #30
RecurseTree StartPath$ '& "\"
Close #30
End Sub
 
---------------------------------------
 
Le prob ? If GetAttr(CurrentPath & FileName) And vbDirectory Then
 
Ca plante toujours ici. : File not found. Quand le GetAttrib(... ) passe sur un dossier, il plante. Que puis-je faire ?! :(

n°132560
karlkox
Posté le 30-04-2002 à 10:11:27  profilanswer
 

si tu changes :
 
 If FileName <> "." And FileName <> ".." Then
 
par :
 
 if StrComp(FileName, ".", vbTextCompare) = 1 and StrComp(FileName, "..", vbTextCompare) = 1 then
 
 
StrComp est plus fiable et 20x fois plus rapide lors de comparaison de chaine (lu sur "VB hardcore" chez Microsoft Press ).

n°132561
Carbon_14
Posté le 30-04-2002 à 10:12:18  profilanswer
 

Faudrait y mettre un point d'arrêt et voir ce qu'il y a dans  
CurrentPath  FileName et vbDirectory.
 
En C/API Windows, y a un truc pénible (qui se retrouve peut-être en VB) : quand on est dans la racine, on a un répertoire C:\, et quand on est dans un répertoire "profond", l'anti-slash final n'est plus là : C:\TEMP.
 
Si CurrentPath est C:\TEMP et qu'on y colle FileName, ca donne C:\TEMPFileName (bof !). Dans C:\, ça donnerait C:\FileName.
Faut tester le dernier caractère de CurrentPath pour savoir si faut ajouter "\" ou si la longueur de la chaîne CurenPath dépasse 3. Si systématique : C:\\FileName : rebof !!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VB6 : Cette fonction a besoin d'une correction.. help !

 

Sujets relatifs
[C] fonction extern déclaré dans les .hOu se trouve l'obect printer dans VB6 ???
[C] comment on fé une fonction ki renvoie une chaine de caracteres ?PhP, fonction header
pb pour sortir d'une fonction Javascript!!Besoin d'une liste de departement de france pour mon script
fonction fseek en C[ free.fr ] besoin d espace
help pour un gros novice :([C ] accès d'une fonction par deux thread
Plus de sujets relatifs à : VB6 : Cette fonction a besoin d'une correction.. help !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR