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 :

Le GetFiles ne filtre pas correctement!


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut Le GetFiles ne filtre pas correctement!
    Bonjour

    je travail actuellement sur un programme qui consiste a lister des fichier (.avi) sur un lecteur multimédia avec un filtre et les ajoute dans une ListBox pour ce faire j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each sFiles In My.Computer.FileSystem.GetFiles("chemin", FileIO.SearchOption.SearchTopLevelOnly, ".avi")
    '...
    Next
    La sa fonctionne il ne me retourne que les fichier en .avi, mais lorsque j'ai ajouter la possibilité de modifier le filtre grâce a une TextBox, sa donne donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each sFiles In My.Computer.FileSystem.GetFiles("chemin", FileIO.SearchOption.SearchTopLevelOnly, "*" & TextBox1.Text  & "*.avi")
    '...
    Next
    Et la c'est la foire si par exemple j’écris dans la TextBox la lettre 'z' voici ce qu'il me retourne:



    PS:l'image n'est pas le vrais programme, j'ai refait un projet en vitesse qui exprime bien l'erreur, merci de ne pas le critiquer...
    Et pour tant il a ajouté 'A Dangerous Method 2011.avi' et bien d'autre qui ne contiennes pas de 'z'

    voici le code complet:

    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
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' Efface le contenu de la Listbox
            ListBox1.Items.Clear()
     
            ' Effectue la recherche dans le répertoire et dans la catégorie (ComboBox1) spécifié avec un filtre
            For Each sFiles In My.Computer.FileSystem.GetFiles( _
                "C:\Developez.com\" & ComboBox1.SelectedItem & "\", FileIO.SearchOption.SearchTopLevelOnly,  "*" & TextBox1.Text & "*.avi")
     
                ' Obtient le nom du fichier
                sFiles = My.Computer.FileSystem.GetName(sFiles)
     
                ' Ajoute le résultat a la ListBox
                ListBox1.Items.Add(sFiles)
            Next
        End Sub
    End Class
    merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Je ne sais pas si ça vas résoudre ton problème mais je vois quelques erreurs dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each sFiles In My.Computer.FileSystem.GetFiles( _
                "\\WDTVLIVE\Sauvegarde\MultiMedia\Mes films\" & ComboBox1.SelectedItem & "\", FileIO.SearchOption.SearchTopLevelOnly,  "*" & TextBox1.Text & "*.avi")
     
                ' Obtient le nom du fichier
                sFiles = My.Computer.FileSystem.GetName(sFiles)
    La première c'est le ComboBox1.SelectedItem, vaudrait mieux mettre ComboBox1.SelectedText.
    La deuxième c'est le &"\", qui ne sert à rien puisque ton chemin de fichier est complet avec ta string + ComboBox1.SelectedText.
    Et la dernière, définit sFiles comme étant une string et modifie la partie qui ajoute les fichiers trouvés dans ta ListBox en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add(My.Computer.FileSystem.GetName(sFiles))
    J'ai testé rapidement et chez moi, ça fonctionne correctement.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    j'ai corriger le code en déclarant sFiles en String, retiré le & "\" et modifier le code lors de l'ajout a la ListBox.
    mais mettre ComboBox1.SelectedText ne retourne riens puisque il a la propriété:
    DropDownStyle a DropDownList
    et que le Text vaudra toujours Nothing

    je l'ai ensuite tester et il me retourne toujours les même fichiers.
    je tiens a préciser que il va chercher la liste des fichier sur un Lecteur Multimédia connecté en local et qu'il y a beaucoup de fichiers, je ne sais pas si sa a quelque chose a voir?

    j'avais déjà effectué le même code mais dans un répertoire différant, il listais des fichier .yml et sa fonctionnais correctement.

    EDIT: si je met dans le filtre plus d'une lettre il fonctionne mais dès que je remet une seul lettre il me donne de faux résultat.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Je me suis fait un petit exemple comme le tien pour tester.

    La seule différence avec la tienne c'est que je remplis ma ComboBox avec une procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub btnChercher_Click(sender As System.Object, e As System.EventArgs) Handles btnChercher.Click
            lstResultat.Items.Clear()
            For Each sFiles As String In My.Computer.FileSystem.GetFiles("\\TITAN\Users\Yves\" + ComboBox1.SelectedItem.ToString, FileIO.SearchOption.SearchTopLevelOnly, "*" + txtRecherche.Text + "*.accdb")
                lstResultat.Items.Add(My.Computer.FileSystem.GetName(sFiles))
            Next
        End Sub
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            For Each _Folder As String In My.Computer.FileSystem.GetDirectories("\\TITAN\Users\Yves")
                ComboBox1.Items.Add(My.Computer.FileSystem.GetName(_Folder))
            Next
        End Sub
    Chez moi ça fonctionne bien. C'est louche ton histoire de filtre qui ne s'applique pas en y mettant qu'une lettre.
    Essaye de code le filtre en dur avec "*z*.avi" pour voir.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    j'ai fait comme tu m'a dit, j'ai remplit ma Combobox par une procédure, j'ai écrit en dure "*z*.avi"
    j'ai rajouté le .ToString

    Et malgré sa il me donne les même résultat, si je met autre chose a la place du "z" il me donne d'autres résultats,
    on dirais que il essaye de filtrer vu que tout les fichier qui contienne un z son dans la list mais d'autre fichier qui eux n’ont rien a voir se trouvent aussi dans cette list...

    je comprend vraiment pas... le compilateur est sensé faire ce que on lui dit.
    je vais essayer de le mettre a jour.

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    tu peux essayer avec une requête Linq. Voici le code qui reste à adapter venant de cette page MSDN :

    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
            ' Change the drive\path if necessary 
            Dim root As String = "C:\Program Files\Microsoft Visual Studio 9.0" 
     
            'Take a snapshot of the folder contents 
            Dim dir As New System.IO.DirectoryInfo(root)
     
            Dim fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
     
            ' This query will produce the full path for all .txt files 
            ' under the specified folder including subfolders. 
            ' It orders the list according to the file name. 
            Dim fileQuery = From file In fileList _
                            Where file.Extension = ".txt" and file.Name like "*" & TextBox1.Text & "*" _
                            Order By file.Name _
                            Select file
     
            For Each file In fileQuery
                ComboBox1.Items.Add(file.Name)
            Next
    En plus tu as l'avantage que tu peux filtrer sur d'autre attribut avec cette technique.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    j'ai adapter ton code Sankasssss et apparemment sa fonctionne!
    mais comment doit-je faire si je veux qu'il filtre les .avi et .mkv?
    j'ai essayer de mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where file.Extension = ".avi" or file.Extention = ".mkv" And file.Name Like "*" & TextBox1.Text & "*" _
    mais il me donne 4 autre faux résultat...

    PS: Merci de votre aide en tout cas
    EDIT: il fait encore des erreur quand il filtre une seul extension, sur un résultat il a 90% bon le reste ne contienne pas la lettre que j'ai écrite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtre login ne fonctionne pas correctement
    Par stoner2008 dans le forum JSF
    Réponses: 5
    Dernier message: 20/11/2013, 10h44
  2. [OpenOffice][Tableur] [Seven, Calc 3.2.0]Filtre ne fonctionne pas correctement
    Par Filippo dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 08/05/2010, 11h51
  3. Réponses: 7
    Dernier message: 23/08/2008, 11h34
  4. Réponses: 13
    Dernier message: 31/08/2005, 14h03
  5. [IB71] mon Blob ne marche pas correctement
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 2
    Dernier message: 17/09/2003, 14h03

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