IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Liste de fichiers dans un tableau multidimentionel


Sujet :

Windows Forms

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut Liste de fichiers dans un tableau multidimentionel
    Bonjour,

    je veux lister dans une tableau la liste des extentions, leurs nombres et leurs tailles total, dans ma procédure j'obtiens une erreur au moment de redimentionner mon tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Dim i As Integer = 0
            Dim j As Integer = 0
            Dim Tableau(i, 2) As String
            Dim Ext As String = ""
     
            For Each ofile In oFS.GetFiles()
                Ext = ofile.Extension
                If RechercheTableau(Ext, Tableau) = False Then
                    MessageBox.Show("Faux")
                    For j = 0 To 2
                        If j = 0 Then
                            'Enregistrer l'extention dans le tableau
                            Tableau(i, j) = Ext.ToString
                        ElseIf j = 1 Then
                            'Additionner le nombre de cet extention dans le dossier
                            Tableau(i, j) = My.Computer.FileSystem.GetFiles(oFS.FullName, FileIO.SearchOption.SearchTopLevelOnly, "*" & Ext).Count
                        ElseIf j = 2 Then
                            'Additionner les octets pour cette extention
                        End If
                    Next
     
                Else
                    MessageBox.Show("Vrai")
                End If
                i = i + 1
                ReDim Preserve Tableau(i, j)
                j = 0
            Next
    Le message
    'ReDim' ne peut changer que la dimension la plus à droite.
    Quelqu'un peut m'aider SVP
    Merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    les tableaux étaient utile entre 1980 et 2000
    sur .net on fait de l'objet (POO)
    c'est plus lisible, plus performant, plus maintenable etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Extension
      public ext as string
      public NbFiles as integer 
      public TailleTotale as integer
    end class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim Exts as new system.collections.generic.dictionary(of string, extension)
     
    début boucle sur les fichiers
      if not exts.containskey([extension du fichier actuel]) then
          exts.add([extension du fichier actuel],new extension)
          exts([extension du fichier actuel]).ext = [extension du fichier actuel]
      end if
     
      exts([extension du fichier actuel]).NbFiles += 1
      exts([extension du fichier actuel]).TailleTotale += [Taille du  fichier actuel]
    fin boucle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    les tableaux étaient utile entre 1980 et 2000
    sur .net on fait de l'objet (POO)
    c'est plus lisible, plus performant, plus maintenable etc...
    Rhooo, t'exagères un peu quand même, c'est encore utile les tableaux
    Mais dans un cas comme ça, c'est clairement pas idéal

    Voilà encore une autre approche en utilisant Linq (.NET 3.5) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Imports System.IO
    ...
    	Dim dirInfo As New DirectoryInfo(cheminDuRepertoire)
    	Dim query = _
    		From fileInfo In dirInfo.GetFiles() _
    		Group fileInfo By Key = fileInfo.Extension Into Group _
    		Select New With { _
    			.Extension = Key, _
    			.NbFiles = Group.Count(), _
    			.TailleTotale = Group.Sum(Function(f) f.Length) _
    		}
     
    	Dim list = query.ToList()

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut merci à vous deux
    bon, la façon à pol63 fonctionne bien, la seul chose c'est qu j'ai un avertissement qui dit
    Avertissement 1 La classe fichier peut être conçue, mais il ne s'agit pas de la première classe du fichier. Visual Studio requiert que les concepteurs utilisent la première classe du fichier. Déplacez le code de la classe afin qu'il s'agisse de la première classe du fichier et essayez de recharger le concepteur. 0 0
    car j'ai deux public class

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    maintenant je vous pris d'excuser mon ignorance mais je n'arrive pas récupérer les valeurs de exts.

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(Exts(1).ext.ToString)

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonjour,
    D'après ce que je vois tu as suivi la méthode de Pol63, donc tu t'es servi d'un Dictionary(Of String, Extension) qui est indexée par clef (ici un string).

    Par conséquent pour récupérer un élément tu dois faire:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'exts([extension que tu souhaites voir affichée]).ext
    'pas besoin de ToString le champ ext est déjà un String
    'exemple
    MessageBox.Show(exts("txt").ext)
    Ce qui dans ce cas ne présente que peu d'intérêt vu qu'il t'afficheras sûrement "txt"

    Maintenant si tu veux afficher toutes les extensions de ta liste:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim sb as New System.Text.StringBuilder()
    For Each kvp As KeyValuePair(Of String, Extension) In Exts
        sb.AppendLine(kvp.Value.ext)
    Next
    MessageBox.Show(sb.ToString())
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Oui j'ai essayé la version de pol c'est celui que j'ai reçu en premier,

    dans ma liste je veux savoir par exemple quel extention occupe la 6 eme enregistrement.

    Par la suite être en mesure de récupérer la taille et le nombre d'extention de cet enregistrement.

    En fait le but de cet opération est de me faire un listview dans un explorateur avec une liste d'extention, leurs nombres et leurs tailles totals

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    dans ce cas il ne faut pas utiliser un dictionary, mais un list of et avoir un autre moyen de retrouver les instances

    m'enfin si tu reprends le code qu'on te donne ca ne te servira à rien, le but est de le comprendre et de s'en inspirer
    donc il vaut mieux que tu potasses la POO, les classes et les collections, ensuite tu sauras clairement quoi écrire plutot que de tatonner

    et puis la solution de tomlev est encore plus élégante, vu que le but c'est juste de la lecture de données un type anonyme suffit amplement
    linq à potasser après les bases donc
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    et puis la solution de tomlev est encore plus élégante, vu que le but c'est juste de la lecture de données un type anonyme suffit amplement
    Ca dépend en fait... tant que tu restes dans la même méthode, un type anonyme peut suffire effectivement. Mais si ça doit être utilisé ailleurs, il faut déclarer le type quelque part

Discussions similaires

  1. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59
  2. Réponses: 14
    Dernier message: 19/11/2005, 18h56
  3. Mettre un fichier dans un tableau
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 26/07/2005, 10h47
  4. [JSP] liste de fichiers dans une appli web
    Par cyrso dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/01/2005, 17h17
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo