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

VB.NET Discussion :

Plusieurs extensions pour GetFiles


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Plusieurs extensions pour GetFiles
    Bonsoir,

    Après de multiples recherches sur le net je n'ai pas trouvé de réponse convaincante à ma question, je me suis donc décidé à poster sur un forum !
    (Désolé si le sujet à déjà été évoqué sur le forum, j'ai pourtant cherché avant)

    J'ai une liste déroulante avec pour valeur :
    0. Tout
    1. Images
    2. Musiques
    3. Documents

    Suivant la valeur sélectionné je ne voudrais afficher dans une listbox soit tous les documents ou que les images ect...

    Voici l'extrait de mon code :

    L_DSource est une listbox
    dir contient le chemin du dossier sélectionné grâce à l'objet FolderBrowserDialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case CB_TypeSource.SelectedIndex
                Case 0
                    L_DSource.DataSource = dir.GetFiles("*.*")
                Case 1
                    L_DSource.DataSource = dir.GetFiles("*.jpg")
                Case 2
                    L_DSource.DataSource = dir.GetFiles("*.mp3")
                Case 3
                    L_DSource.DataSource = dir.GetFiles("*.doc")
     End Select
    J'ai déjà essayé de séparer les extensions par des ";" "," "|" rien n'y fait.

    Lors de mes recherches certaines personnes disaient que l'objet ne prenait pas en compte plusieurs extensions et donc qu'il fallait se débrouiller d'une autre façon. Mais je ne sais pas non plus comment faire. Quelqu'un peut il m'aider, s'il vous plaît ?

    Merci d'avance pour ceux qui se pencheront sur mon problème !

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Il faut gérer ce cas soi même en effet, mais ce n'est pas très compliqué.

    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
    Public Shared Class FileSearch
     
        Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String()) As String()
            Return GetFiles(path, extensions, SearchOption.TopDirectoryOnly)
        End Function
     
        Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String(), ByVal searchOptions As SearchOption) As String()
            Dim files As List(Of String) = New List(Of String)()
            For Each extension As String In extensions
                files.AddRange(Directory.GetFiles(path, extension, searchOptions))
            Next
            Return files.ToArray()
        End Function
     
    End Class
    A tester car je suis passé par un convertisseur pour générer le code.

    A l'utilisation, en reprenant ton exemple, cela donnerait quelque chose comme
    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
    Dim extensions As String()
     
    Select CB_TypeSource.SelectedIndex
       Case 1
           extensions = New String() {"*.jpg", "*.bmp", "*.png"}
           Exit Select
       Case 2
           extensions = New String() {"*.mp3", "*.ogg", "*.wav"}
           Exit Select
       Case 3
           extensions = New String() {"*.txt", "*.rtf", "*.doc", "*.docx"}
           Exit Select
       Case Else
           extensions = New String() {"*.*"}
    End Select
     
    L_DSource.DataSource = FileSearch.GetFiles(dir.FullName, extensions)
    Pas de questions techniques par MP

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Ça fonctionne très bien j'ai juste du enlever le Shared class.

    Merci beaucoup pour l'aide et d'avoir répondu aussi vite !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Euh en faite je reviens parce que je viens de remarquer un truc, dans ma liste box ça m'affiche le chemin complet du fichier plus le nom du fichier et son extension.

    Seulement je voudrais que seul le nom du fichier et son extension s'affiche dans ma liste box.

    Ça doit être un truc tout bête à changer mais j'arrive pas à trouver.

    Donc j'aurais encore besoin d'un petit coup de main s'il vous plaît !

  5. #5
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Pour récupérer le nom du fichier sans le chemin utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomDuFichier = System.IO.Path.GetFileName(chemin)

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Si je fais ça je ne peux pas récupérer le nom du fichier en fonction de son extension comme il n'y a en paramètre que le chemin

  7. #7
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    En fait la méthode GetFileName ne retourne pas les noms des fichiers d'un dossier, mais retourne une chaine de caractère contenant le nom du fichier sans son chemin.

    Par exemple le code suivant retournera la valeur "cmd.exe":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.Path.GetFileName("C:\Windows\System32\cmd.exe")
    Donc dans le code que t'a donné StormimOn il faudrait que tu remplace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    files.AddRange(Directory.GetFiles(path, extension, searchOptions))
    par quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each fichier In Directory.GetFiles(path, extension, searchOptions)
          files.AddRange(GetFileName(fichier))
    Next

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé avec ta méthode mais je n'y arrive toujours pas.

    J'ai aussi essayer d'autre syntaxe, comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L_DSource.DataSource = FileSearch.GetFiles(dir.Name, extensions)
    A la place du FullName qui est le chemin entier. Mais une fois le dossier sélectionné dans le FolderBrowserDialog il me met l'erreur
    Impossible de trouver une partie du chemin d'accès...
    au niveau de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    files.AddRange(Directory.GetFiles(path, extension, searchOptions))
    J'ai donc essayé de mettre à la place du path une variable string. Car en faite ma variable dir ce présente ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim dir As New DirectoryInfo(PathSource)
    Et donc ça me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L_DSource.DataSource = FileSearch.GetFiles(PathSource, extensions)
    Donc là j'ai aucune erreur, mais il m'affiche quand même tout le chemin du fichier. Et je ne peut pas lui affecter le .Name parce que c'est une variable String.

    Puis j'ai testé d'autre syntaxe encore, mais sans résultat non plus.

  9. #9
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le plus simple serait de renvoyer une liste de FileInfo. Au niveau de la ListBox tu pourras ainsi définir le DisplayMember pour n'afficher que le nom du fichier, sachant que tu auras accès à l'objet complet (FileInfo) pour les besoins du traitement.

    Modifie le code en quelque chose comme
    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
    Public Shared Class FileSearch
     
        Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String()) As FileInfo()
            Return GetFiles(path, extensions, SearchOption.TopDirectoryOnly)
        End Function
     
        Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String(), ByVal searchOptions As SearchOption) As FileInfo()
            Dim files As List(Of FileInfo) = New List(Of FileInfo)()
            Dim di As DirectoryInfo = New DirectoryInfo(path)
            For Each extension As String In extensions
                files.AddRange(di.GetFiles(extension, searchOptions))
            Next
            Return files.ToArray()
        End Function
     
    End Class
    La source de données de ta ListBox étant maintenant des objets de type FileInfo, il faut définir le DisplayMember afin d'indiquer au contrôle comment afficher l'information. Dans le cas présent le DisplayMember serait Name, c'est à dire la propriété de l'objet qui permet de récupérer le nom du fichier sans le chemin d'accès.

    Il suffit d'ajouter dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L_DSource.DisplayMember = "Name"
    ou bien directement en mode design, en saisissant l'information.

    Ca devrait être un peu mieux comme ça pour ce qui est de l'affichage.

    Ensuite pour le traitement il suffit de récupérer l'item sélectionné avec la propriété SelectedItem de la ListBox (ce qui renverra un objet FileInfo) ou bien tu peux définir le ValueMember afin d'indiquer la valeur que tu veux récupérer via la propriété SelectedValue (ValueMember à FullName pour obtenir le nom complet du fichier par exemple).
    Pas de questions techniques par MP

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'ai modifier le début du code comme tu m'as dis, j'ai compris pour le changement d'objet et tout, mais je ne vois pas comment l'utiliser.

    C'est quelque chose dans ce goût là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     L_DSource.DisplayMember = "Name"
     L_DSource.DataSource = FileSearch.GetFiles(PathSource, extensions)
    J'avoue être un peu perdue , mais alors je nage complétement quand tu dis ça :

    ou bien directement en mode design, en saisissant l'information.

    Ca devrait être un peu mieux comme ça pour ce qui est de l'affichage.

    Ensuite pour le traitement il suffit de récupérer l'item sélectionné avec la propriété SelectedItem de la ListBox (ce qui renverra un objet FileInfo) ou bien tu peux définir le ValueMember afin d'indiquer la valeur que tu veux récupérer via la propriété SelectedValue (ValueMember à FullName pour obtenir le nom complet du fichier par exemple).

  11. #11
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Quelque chose dans ce goût là oui. Fait une petite recherche sur le DataBinding, DisplayMember et ValueMember pour plus d'informations
    Pas de questions techniques par MP

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai longuement chercher sur Internet ce dont tu me parlais StormimOn, mais je n'y arrive toujours pas j'ai testé des chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L_DSource.DisplayMember = "Name"
    Dim instance As ListControl
    instance = FileSearch.GetFiles(PathSource, extensions)
    L_DSource.DataBinding = instance
    Mais ce n'est pas ça non plus. Est-ce que je pourrais avoir un exemple ? Parce que là je vois pas trop comment m'en sortir.

    Merci d'avance !

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je me permet de relancer le sujet, parce que j'ai vraiment besoin d'aide. Pour tout expliquer je suis en deuxième année de BTS Informatique de Gestion et pour cet examen nous devons faire 5 PTI (des petits projets informatiques). L'examen arrive à grand pas et je n'ai toujours pas réussi à solutionner mon problème, qui est : que j'aimerais récupérer uniquement le nom de fichier et son extension.

    J'ai plus ou moins deux pistes, mais pour chacune d'entre elles je bloque à un moment donné.

    La première, dans la continuité des informations que m'avait donné StormimOn

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    L_DSource.DataSource = FileSearch.GetFiles(PathSource, extensions)
     
    Dim value As String
    Dim TaillePath As Integer
    'Taille du chemin complet sans le nom du fichier et son extension
    TaillePath = PathSource.Length + 1
     
    value = L_DSource.SelectedItem.ToString.Substring(TaillePath)
    L_DSource.DisplayMember = value
    Sinon est-ce qu'une intervention dans la class FileSearch avec quelque chose de ce type serait possible ?

    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
    Public Class FileSearch
     
            Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String()) As String()
                Return GetFiles(path, extensions, SearchOption.TopDirectoryOnly)
            End Function
     
            Public Shared Function GetFiles(ByVal path As String, ByVal extensions As String(), ByVal searchOptions As SearchOption) As String()
                Dim dir As New DirectoryInfo(PathSource)
                Dim files As List(Of String) = New List(Of String)()
                Dim files2 As List(Of String) = New List(Of String)()
     
                For Each extension As String In extensions
                    files.AddRange(Directory.GetFiles(path, extension, searchOptions))
     
                    files2.AddRange(System.IO.Path.GetFileName(files))
                Next
     
                Return files2.ToArray()
            End Function
    Sinon j'avais pensé a passer par un conteneur intermédiaire, puis extraire le nom de fichier et son extension, afin de les ajouter au fur et à mesure dans ma listbox. Mais je ne trouve pas de conteneur approprié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     For i As Integer = 0 To L_DSource.Items.Count - 1
            L_DSource.Items.Add(Path.GetFileName(Conteneur.Items(i).ToString))
    Next
     
    'ou
     
    Dim TaillePath As Integer
    'Taille du chemin complet sans le nom du fichier et son extension
    TaillePath = PathSource.Length + 1
     
    For i As Integer = 0 To L_DSource.Items.Count - 1
           L_DSource.Items.Add(Conteneur.Items(i).ToString.Substring(TaillePath))
    Next
    Une âme charitable aurait-elle la bonté de me venir en aide ?
    Merci d'avance.

Discussions similaires

  1. Plusieurs extensions pour 1 site
    Par lolaalol dans le forum Webmarketing
    Réponses: 4
    Dernier message: 20/05/2014, 15h43
  2. [CS3] Plusieurs extensions pour les images
    Par HAbroc dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 27/06/2009, 22h18
  3. creer une extension pour exchange
    Par simoryl dans le forum C++
    Réponses: 2
    Dernier message: 23/03/2005, 11h47
  4. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27
  5. Réponses: 2
    Dernier message: 05/07/2004, 17h50

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