Extraire nom de fichier d'une extension spécifique [Résolu]

Signaler
-
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016
-
Bonjour,

Je cherche à déplacer des fichiers .pdf d'un dossier vers un autre. Or, dans le dossier d'origine se trouvent plusieurs type de fichiers (.xls ou autre).
Je cherche donc à ce que le déplacement ne prenne en compte que les fichiers .pdf.

J'arrive à récupérer mes noms de fichiers seuls, avec ou sans l'extension... Mais je ne trouve pas comment, par exemple dans mon fichier texte contenant tous les noms de fichiers d'un dossier, supprimer tous les noms ne contenant pas .pdf.

Pouvez vous me guider?
Merci d'avance.
Cordialement,
Nevda

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Bonjour,
- Tu as ouvert cette discussion dans le forum GENERAL Visual Basic (qui comprend plusieurs sous-forums)
Tant et si bien(mal ...) que nous ne savons pas sous quoi tu développes ! Or, la solution dépend de ton langage de développement, qui reste à préciser.
- nous apprécierions de voir le code que tu as écrit. Plusieurs méthodes existent et si nous devons corriger ton code (la méthode choisie) il nous faut le voir, ce code, non ?
Bonjour ucfoutu,

Je suis assez novice dans le domaine et c'est mon premier post sur le forum. Je code sur visual basic 2010.
Function nomdefichier(dossiersource As String) As String

        Dim fichier As String
        Dim car0 As String
        
        My.Computer.FileSystem.GetFileInfo(dossiersource)
        For Each fichier In IO.Directory.GetFiles(dossiersource)
            My.Computer.FileSystem.WriteAllText("C:\Users\win8\Desktop\nomfichier.txt", fichier, True)
        Next
        car0 = My.Computer.FileSystem.ReadAllText("C:\Users\win8\Desktop\nomfichier.txt")
        My.Computer.FileSystem.DeleteFile("C:\Users\win8\Desktop\nomfichier.txt")
        car0 = car0.Replace(dossiersource, " ")
        car0 = car0.Replace("\", "")
        Dim fichiers() As String = car0.Split(" ")
        nomdefichier = car0.Substring(1)
        My.Computer.FileSystem.WriteAllText("C:\Users\win8\Desktop\nomfichier.txt", nomdefichier, True)
    End Function


Souhaites-tu que je commente mon code?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
1) Je déplace donc cette discussion vers le sous-forum VB.Net où elle aurait dû être ouverte. Prends s'il te plait dorénavant ce soin
2) je ne suis pas VB.Nettiste. Un VBNettiste te répondra donc.
J'observe toutefois que ton code ne parait pas du tout correspondre à ce que tu exposes dans ton premier message.
Attends donc le passage par là d'un VB.Nettiste.
Messages postés
7418
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 juin 2021
124
Bonjour,

Le plus simple c'est de filtrer par extension en listant le dossier dans une Listbox:

https://msdn.microsoft.com/fr-fr/library/wz42302f(v=vs.110).aspx
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Bonjour,

Le deuxième paramètre formel "searchpattern" correspond-il à l'extension (dans mon cas .pdf) à entrer? Les extensions sont-elles prises en compte dans le titre du fichier?

Merci pour votre réponse.
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour,

C'est donc du Vb.net, la prochaine fois pour gagner du temps poste dans le bon forum.

Regarde https://msdn.microsoft.com/fr-fr/library/system.io.directory.getfiles(v=vs.110).aspx
Il y a une surcharge qui permet de mettre un pattern, *.pdf, par exemple.

Pour déplacer un fichier, il y a https://msdn.microsoft.com/fr-fr/library/system.io.file.move(v=vs.110).aspx
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Bonjour,
Merci bien, cela répond à ma question à Le pivert.
Je vous tiens au courant.

ps : c'est mon baptême de forum, désolé de n'avoir su placer ce post dans le bon forum...
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Formidable, cela fonctionne.

Je n'ai jamais utilisé de listbox, je fonctionne en créant un fichier texte, puis en créant un tableau unidimensionnel avec .split pour étudier ce tableau (et donc les noms de fichier) avec des boucles for par exemple.
Est ce une bonne idée?

Cordialement
Messages postés
7418
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 juin 2021
124
Imports System.IO
Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Try
            ' Only get files that begin with the letter "c."
            Dim dirs As String() = Directory.GetFiles("C:\Users\Daniel\Documents\My eBooks\", "*.pdf")'adapter le chemin du dossier
            MsgBox("Nombre de fichiers PDF: " & CType(dirs.Length, MsgBoxStyle))
            Dim dir As String
            For Each dir In dirs
                ListBox1.Items.Add(dir)
            Next
        Catch
            MsgBox("The process failed: {0}", CType(e.ToString(), MsgBoxStyle))
        End Try
    End Sub
End Class
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Je n'ai pas bien saisi ce que faisait try...catch. Cela serait une sorte de gestion d'erreurs? Try/catch possède d'autres fonctions? Merci.
Messages postés
7418
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 juin 2021
124 >
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Voir ceci:

https://msdn.microsoft.com/fr-fr/library/bb727317.aspx

Bonne continuation

@+ Le Pivert
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Très bien merci pour votre réactivité, j'ai compris. Bonne continuation.
Messages postés
7418
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 juin 2021
124
NON

pourquoi passer par un fichier texte, alors qu'en entrant les fichiers dans une listBox, il suffit ensuite d'utiliser une fonction pour déplacer les fichiers en parcourant la listBox
Simple
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

C'est vrai. Merci beaucoup!
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
On peut aussi parcourir le tableau dirs.

D'ailleurs tu peux remplacer la boucle
     For Each dir In dirs
                ListBox1.Items.Add(dir)
            Next


Par
ListBox1.DataSource = dirs
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

Bonjour,
J'essaie de copier ces fichiers en parcourant dirs avec une boucle for. Or, le 2eme argument de My.computer.filesystem.copyfile est la destination du fichier vers lequel déplacer le fichier d'origine dont le nom est dans dirs(). Copyfile n'est elle pas la fonction à utiliser ? Ou bien dois-je modifier l'élément de dirs() au préalable ?
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dirs As String() = IO.Directory.GetFiles("C:\Users\win8\Desktop", "*.pdf") 
        Dim dir As String
        For Each dir In dirs
            ListBox1.Items.Add(dir)
        Next
        For a As Byte = 0 To dirs.Length - 1
          My.Computer.FileSystem.CopyFile(dirs(a),????)
        Next
    End Sub
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour,
Tout en haut tu as écrit vouloir déplacer les fichiers.

Je t'ai répondu d'utiliser File.Move().
As tu au moins essayé?
Messages postés
15
Date d'inscription
lundi 13 juin 2016
Statut
Membre
Dernière intervention
5 juillet 2016

J'ai (ré...) essayé. J'ai réussi. Bonne journée...