Extraire nom de fichier d'une extension spécifique

Résolu
Nevda - 13 juin 2016 à 11:05
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016 - 14 juin 2016 à 09:56
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 juin 2016 à 11:12
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 ?
0
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?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 juin 2016 à 11:31
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
13 juin 2016 à 11:34
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 11:41
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.
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
13 juin 2016 à 11:41
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
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 11:44
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...
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 12:02
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
13 juin 2016 à 12:02
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
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 14:32
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 14:37
Voir ceci:

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

Bonne continuation

@+ Le Pivert
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 14:46
Très bien merci pour votre réactivité, j'ai compris. Bonne continuation.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
13 juin 2016 à 12:14
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
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
13 juin 2016 à 14:13
C'est vrai. Merci beaucoup!
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
13 juin 2016 à 12:20
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
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
Modifié par Nevda le 14/06/2016 à 08:17
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
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
14 juin 2016 à 09:54
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é?
0
Nevda Messages postés 15 Date d'inscription lundi 13 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
14 juin 2016 à 09:56
J'ai (ré...) essayé. J'ai réussi. Bonne journée...
0
Rejoignez-nous