Lister les sous repertoire et recuperer leurs noms

sebasti188 Messages postés 4 Date d'inscription samedi 19 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009 - 27 sept. 2009 à 11:21
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 27 sept. 2009 à 18:02
Bonjour, je debute en vb.net et j'ai un petit soucis.
Je souhaiterai lister tout les sous repertoire d'un repertoire et placer leur nom dans un tableau. J'arrive bien a recuperer les nom des sous repertoire est a les mettre dans un string, mais pas dans un tableau.

Voici mon code :
        Dim nombreSousRepertoire As Integer = 0
        Dim tableauRep() As String
        Dim liste As String = ""
        Dim s As DirectoryInfo
        Dim cheminFichierVehicule As String = Environ("USERPROFILE")
        cheminFichierVehicule = cheminFichierVehicule & "\vehicules\vehicules.txt"


        Vehicule.repertoire = Environ("USERPROFILE")
        Vehicule.repertoire = Vehicule.repertoire & "\vehicules"
        Dim di As New DirectoryInfo(Vehicule.repertoire)
        Dim diArr As DirectoryInfo() = di.GetDirectories()

        Dim monStreamWriter As StreamWriter
        monStreamWriter = New StreamWriter(cheminFichierVehicule)

        If Directory.Exists(Vehicule.repertoire) Then
            For Each s In diArr
                tableauRep(nombreSousRepertoire) = s.Name
                liste = liste & "/" & s.Name
                nombreSousRepertoire = nombreSousRepertoire + 1
            Next s
            Label1.Text = liste
        Else
            Label1.Text = "Vous n'avez aucun véhicule d'enregistrer"
        End If


l'erreur est sur la ligne tableauRep(nombreSousRepertoire) = s.Name

merci de votre aide

8 réponses

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 11:54
Bonjour,

C'est normal car l'interpreteur, à ce stade de l'utilisation du tableau, doit savoir de combien d'éléments il va être constitué. Ou bien il est nécéssaire de lui indiquer dynamiquement que l'on veut ajouter un élément avant l'affectation proprement dite. C'est cette dernière solution que je te propose d'utiliser.

Dans ton exemple tu dois modifier la ligne
Dim nombreSousRepertoire As Integer = 0

en
Dim nombreSousRepertoire As Integer = -1

et modifier la partie
For Each s In diArr
  tableauRep(nombreSousRepertoire) = s.Name
  liste = liste & "/" & s.Name
  nombreSousRepertoire = nombreSousRepertoire + 1
Next s

en
For Each s In diArr
  nombreSousRepertoire +1 '-- Equivalent de nombreSousRepertoire nombreSousRepertoire + 1
  '-- Ajout d'un élément supplémentaire au tableau
  '-- sans perdre les données précédemment entrées
  ReDim Preserve tableauRep(nombreSousRepertoire)
  '-- Affectation de la valeur
  tableauRep(nombreSousRepertoire) = s.Name
  liste = liste & "/" & s.Name '<-- Toujours utile ?
Next s


A+
0
sebasti188 Messages postés 4 Date d'inscription samedi 19 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009
27 sept. 2009 à 12:05
merci, ca fonction tres bien.
encore merci pour la rapidite de la reponse
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 sept. 2009 à 13:45
Bonjour,

En .NET, éviter d'utiliser Redim !!!

Préférez utiliser system.Collections.Generic.List :

Dim tableauRep as new list(of String)

Et ensuite, ça sera plus souple et plus rapide.

Mon site
0
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
27 sept. 2009 à 14:14
Merci pour la suggestion NHenry
Je vais faire comme ça dorénavant
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebasti188 Messages postés 4 Date d'inscription samedi 19 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009
27 sept. 2009 à 16:00
merci, par contre etant nouveau, j'ai essayer d'utiliser
system.Collections.Generic.List :
Dim tableauRep as new list(of String)

mais je n'ai pas reussi.

j'ai suppossé que system.Collections.Generic.List ce mettai en debut de programme avec un import mais non.
si tu pouvais donner plus d'explication, merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 sept. 2009 à 16:10
Bonjour,

Au début de ton code mets :
Imports system.Collections.Generic

Et ça devrait passer (il y a peut être une petite erreur dans le nom, mais c'est très proche).

Mon site
0
sebasti188 Messages postés 4 Date d'inscription samedi 19 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009
27 sept. 2009 à 17:53
ok, mais pour la ligne

Dim tableauRep as new list(of String)


il y a une erreur, il me souligne tableauRep et me dit :
La variable 'tableauRep' masque une variable dans un bloc englobant.

En faite j'ai juste remplacé la ligne
ReDim Preserve tableauRep(nombreSousRepertoire)
par celle cite plus haut
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 sept. 2009 à 18:02
Bonjour,

C'est dans la déclaration, pas sur le redim.
A la place de ton Dim TableauRep() as string

Mon site
0
Rejoignez-nous