VB6 : Cette fonction a besoin d'une correction.. help ! - VB/VBA/VBS - Programmation
Marsh Posté le 26-04-2002 à 22:22:54
Premièrement je dois dire que c un code dégueulasse, déclarer des variables sans type c'est vraiment pas bien On dirait que la personne qui a codé ca vien du monde de qbasic
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 :
|
[jfdsdjhfuetppo]--Message édité par Ventilo le 26-04-2002 à 22:23:38--[/jfdsdjhfuetppo]
Marsh Posté le 26-04-2002 à 23:11:06
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.
Marsh Posté le 27-04-2002 à 07:41:19
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 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]
Marsh Posté le 29-04-2002 à 20:38:37
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 ?!
Marsh Posté le 30-04-2002 à 10:11:27
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 ).
Marsh Posté le 30-04-2002 à 10:12:18
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 !!
Marsh Posté le 26-04-2002 à 21:37:46
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 ?