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 :

Liste fichier dans dossier ayant le même nom mais pas la même extention


Sujet :

VB.NET

  1. #1
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut Liste fichier dans dossier ayant le même nom mais pas la même extention
    Bonsoir à tous,

    Il y a bien longtemps que j'ai fais du VB.Net et je coince un peu.
    J'aimerais améliorer une application que j'ai développé il y a quelques années et j'ai besoin de votre aide.

    J'aimerais donc pouvoir lister tous les fichiers dans un répertoire qui ont le même nom mais pas la même extension.
    Pour cela, j'ai déja le nom d'un des fichiers mais j'aimerais avoir la liste des autres qui ont le même nom sachant que d'autres fichiers ayant un autre nom peuvent être également dans ce même répertoire.

    Merci beaucoup de votre aide
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par marsouin_89 Voir le message
    J'aimerais donc pouvoir lister tous les fichiers dans un répertoire qui ont le même nom mais pas la même extension.
    Peut-être, dans une listbox , ce code n'est pas optimiser.
    on met tout les noms des fichiers avec extension dans un tableau, puis avec une boucle imbriqué on vérifie les noms qui sont identiques sans extension,
    puis on les met dans la listbox

    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
    29
    30
    31
    32
    33
    Imports str = Microsoft.VisualBasic.Strings
     
        Sub Liste_Nom_fichier_Meme_nom()
     
            Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\chemin du dossier")
            Dim tableau(0) As String
            Dim i As Integer = 0
     
            For Each fi As System.IO.FileInfo In di.GetFiles
     
                tableau(i) = fi.Name
                i = i + 1
                ReDim Preserve tableau(i)
     
            Next
     
            For j = 0 To i - 1
                For k = 0 To i - 1
                    If str.Left(tableau(j), InStrRev(tableau(j), ".") - 1) = str.Left(tableau(k), InStrRev(tableau(k), ".") - 1) Then
                        If tableau(j) <> tableau(k) Then
                            If ListBox1.Items.Contains(tableau(j)) = False Then
                                ListBox1.Items.Add(tableau(j))
                                Exit For
                            End If
                        End If
     
                    End If
                Next
            Next
     
            MsgBox("End")
     
        End Sub

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Il suffit d'appliquer le filtre sur le nom du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each fileName As String In My.Computer.FileSystem.GetFiles("D:\data\test", FileIO.SearchOption.SearchTopLevelOnly, "NomFic.*")
        ' traitement (avec fileName contenant le chemin, le nom et l'extention)
    Next
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par marsouin_89 Voir le message
    J'aimerais donc pouvoir lister tous les fichiers dans un répertoire qui ont le même nom mais pas la même extension.
    Pour cela, j'ai déja le nom d'un des fichiers mais j'aimerais avoir la liste des autres qui ont le même nom sachant que d'autres fichiers ayant un autre nom peuvent être également dans ce même répertoire.
    Bonjour rv26t,
    je crois que la demande de marsouin_89 est d'avoir toute les fichiers de même nom sans extension.
    donc si on a
    toto.xls
    toto.txt
    tata.xls
    tata.txt

    alors tout les toto et tout les tata devrait sortir dans la liste

    Ce code le fait.
    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
    29
    30
    31
    32
    33
    Imports str = Microsoft.VisualBasic.Strings
     
        Sub Liste_Nom_fichier_Meme_nom()
     
            Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\chemin du dossier")
            Dim tableau(0) As String
            Dim i As Integer = 0
     
            For Each fi As System.IO.FileInfo In di.GetFiles
     
                tableau(i) = fi.Name
                i = i + 1
                ReDim Preserve tableau(i)
     
            Next
     
            For j = 0 To i - 1
                For k = 0 To i - 1
                    If str.Left(tableau(j), InStrRev(tableau(j), ".") - 1) = str.Left(tableau(k), InStrRev(tableau(k), ".") - 1) Then
                        If tableau(j) <> tableau(k) Then
                            If ListBox1.Items.Contains(tableau(j)) = False Then
                                ListBox1.Items.Add(tableau(j))
                                Exit For
                            End If
                        End If
     
                    End If
                Next
            Next
     
            MsgBox("End")
     
        End Sub

  5. #5
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour à tous,

    Merci à vous deux de m'avoir répondu.
    Effectivement, cette seconde solution me convient mieux.

    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
    Function CopyData(ByVal oFileIn As String, ByVal oFolderOut As String) As Boolean
     
    'Chemin du répertoire du fichier à copier (ex : D:\Mondossier)
    FolderFileIn = System.IO.Path.GetDirectoryName(oFileIn)
     
    'Nom du fichier (MonFichier.tif)
    oFileName = System.IO.Path.GetFileName(oFileIn)
    ' Nom du fichier sans extension
    Dim fileWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(oFileName)
    'Liste des fichiers ayant le même nom mais pas la même extension
    Dim fileNames As String() = Directory.GetFiles(FolderFileIn, FileIO.SearchOption.SearchTopLevelOnly, fileWithoutExtension & "*")
     
    'Parcours la liste de tous les fichiers ayant le même nom mais pas la même extension et les copie dans le répertoire de destination
    Dim fileName As String
    For Each fileName In fileNames
           'On copie en remplacant le fichier qui existe déjà
            My.Computer.FileSystem.CopyFile(fileName, FolderOut & "\" & System.IO.Path.GetFileName(fileName), True)
    Next
     
    End Function
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par marsouin_89 Voir le message
    Bonsoir à tous,

    Il y a bien longtemps que j'ai fais du VB.Net et je coince un peu.
    J'aimerais améliorer une application que j'ai développé il y a quelques années et j'ai besoin de votre aide.

    J'aimerais donc pouvoir lister tous les fichiers dans un répertoire qui ont le même nom mais pas la même extension.
    Pour cela, j'ai déja le nom d'un des fichiers mais j'aimerais avoir la liste des autres qui ont le même nom sachant que d'autres fichiers ayant un autre nom peuvent être également dans ce même répertoire.

    Merci beaucoup de votre aide
    Juste pour le plaisir de la chose, j'ai essayé une autre approche moins traditionnelle, à partir de la classe Directory. (Je ne savais pas que c'est aussi apparemment possible avec DirectoryInfo depuis le Framework 4, avec, en prime certains attributs du fichier, mais, je n'ai pas essayé.) Puisque la question portait juste sur les noms, je ne me suis pas badré des attributs, ni des sous-dossiers. Pour un dossier contenant une vingtaine de fichiers, l'affichage des 5 ou 6 fichiers concernés au final est quasiment instantané.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     ''' <summary>
        ''' C'est la routine qui recherche uniquement les noms de fichiers.
        ''' Elle est basée sur la classe Directory. Apparemment, les
        ''' versions 4 et 4.5 du Framework .net permettraient de faire
        ''' la même chose, et peut-être plus avec la classe DirectoryInfo
        '''  </summary>
        ''' <param name="UnDossier">
        ''' C'est le nom du dossier qui a été sélectionné dans la boîte de dialogue</param>
        ''' <remarks>
        ''' Cette routine a été conçue pour être utilisée avec l'interface que j'ai
        ''' mise dans mon programme et les résultats sont en principe affichés dans
        ''' un textbox. Également, le nom du dossier est passé en paramètre par
        ''' par une autre procédure. N'oubliez pas de procéder aux changements qui s'imposent,
        ''' si vous l'utilisez à l'extérieur de mon programme</remarks>
        Sub FaireListe(UnDossier As String)
            'Récupérer l'ensemble des fichiers du dossier choisi
            Dim NotreListe = IO.Directory.EnumerateFiles(UnDossier)
            Dim lenom As String = String.Empty
            Dim lenomcourt As String = String.Empty
            'Une table de données pour conserver tous les noms de fichiers du dossier
            Dim LaTable As New DataTable
            Dim UneRangée As DataRow = Nothing
            With LaTable
                .Columns.Add("NomCourt", GetType(String))
                .Columns.Add("NomLong", GetType(String))
            End With
            'Une table de données pour conserver les noms courts
            'qui se répètent
            Dim LaTable1 As New DataTable
            LaTable1.Columns.Add("NomCourt", GetType(String))
            'Peupler la table des noms de fichiers
            For Each uneentrée As String In NotreListe
                UneRangée = LaTable.Rows.Add
                lenom = IO.Path.GetFileName(uneentrée)
                lenomcourt = IO.Path.GetFileNameWithoutExtension(uneentrée)
                UneRangée.Item("NomCourt") = lenomcourt
                UneRangée.Item("NomLong") = lenom
            Next
            'Requête Linq pour récupérer les noms de fichiers multiples
            'dans ls table "LaTable"
            Dim Fichiers = LaTable
            Dim texte As String = String.Empty
            Dim NomColonne As String = String.Empty
            Dim CompteFichiers = From prod In Fichiers
                                           Group prod By prod!NomCourt _
                                           Into UnNomCourt = Count() _
                                           Where UnNomCourt > 1
                                           Select NomCourt, UnNomCourt
            If CompteFichiers.Count = 0 Then
                MessageBox.Show("Il n'y a pas de noms qui se répètent avec une autre extension")
                Exit Sub
            End If
            'Récupérer les noms courts qui se répètent
            'dans la seconde table.
            For i = 0 To CompteFichiers.Count - 1
                UneRangée = LaTable1.Rows.Add
                UneRangée.Item("NomCourt") = CompteFichiers(i).NomCourt
            Next
            Dim UnTexte As String = String.Empty
            'Passer tous les noms courts de fichiers dans une
            'requête Linq pour retrouver les noms de fichiers, avec les extensions,
            'dans la première table et les afficher dans le TextBox
            For Each cetterangée As DataRow In LaTable1.Rows
                texte = cetterangée.Item("NomCourt")
                Dim LesNomsLongs = From prod In Fichiers _
                 Where prod!NomCourt = texte _
                                        Select prod!NomLong
                For i As Integer = 0 To LesNomsLongs.Count - 1
                    UnTexte = String.Concat(LesNomsLongs(i), ControlChars.NewLine)
                    TextBox2.AppendText(UnTexte)
                Next
            Next
     
        End Sub

    P.S J'ai ajouté ma source complète (cette procédure plus une interface ninimale) ici-même :

    http://dotnet.developpez.com/telecha...ur-l-extension

    Modification :

    Dans les commentaires sur ma source, il y a un programme de lignes en Caiguisé qui est supposé faire l'équivalent de mon "œuvre".
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

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

Discussions similaires

  1. [XL-2002] Recherche fichier dans dossier et sous dossier
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/02/2012, 12h09
  2. Supprimer fichiers ayant même nom mais extension différente
    Par jomajo dans le forum Général Java
    Réponses: 9
    Dernier message: 25/02/2011, 15h13
  3. Boucle liste fichiers dans répertoire
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 31/10/2009, 14h55
  4. Copier 1 fichier dans dossiers 1er niveau
    Par halphorg dans le forum Windows
    Réponses: 2
    Dernier message: 09/03/2008, 19h32
  5. Droits d'acces aux fichiers dans dossier en partage
    Par catoucat dans le forum Windows XP
    Réponses: 3
    Dernier message: 03/07/2006, 02h47

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