[VB] Comment copier plusieurs fichiers dans un dossier

Signaler
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010
-
Bonjour,
Dans mon programme, j'ai une CheckedListBox qui affiche une liste de tout les fichiers (*.mp3 par exemple) d'un dossier.
Mon problème : je n'arrive pas à trouver une solution pour permettre à mon programme de copier le ou les fichier(s) sélectionné(s) (*.mp3 par exemple) de la CheckedListBox dans un autre dossier. Je souhaiterais que l'action de copier se déclenche lorsque l'on appuie sur un bouton.
Je programme sous visual basic 2008.
Merci beaucoup de votre aide qui me sera grandement utile.

10 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Commence par taper "copier fichier" dans la recherche de code en .Net et tu auras des exemples ressemblant

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7467
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
2 août 2021
125
Bonjour,
Vous trouverez la solution ici:
http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms3#LVIII-H-2

en la modifiant pour la copie
 My.Computer.FileSystem.CopyFile("chemin dossier source" & "" & CheckedListBox1.CheckedItems(i).ToString, ("chemin dossier destination" & "" & CheckedListBox1.CheckedItems(i).ToString)


Je vous laisse un peu de travail personnel
Il suffit de chercher un peu comme le dit si bien dit Jack
@+
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

Ok merci de votre aide, juste une question : le (i) représente les Items sélectionnés ?
Messages postés
7467
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
2 août 2021
125
Oui c'est déclaré comme ceci
Dim i As Integer
C'est une boucle dans l'exemple de:
http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms3#LVIII-H-2
il est déclaré en x ,moi je préfère mettre i, c'est un choix personnel. J'ai fait le programme de copie, mais il faudra faire attention, si il y a un fichier portant le même nom dans le dossier de destination, il y a un bug.Dans ma CheckedListBox il n'y a que les noms des fichiers, c'est pour cela qu'il faut mettre le chemin du dossier, sinon il faut mettre le chemin complet.
@+
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

Ok merci beaucoup
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

J'ai tester votre méthode mais il y a un bug :
"Le format du chemin d'accès donné n'est pas pris en charge."
Messages postés
7467
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
2 août 2021
125
J'ai fait le programme et cela fonctionne.
Tout d'abord il faut qu'il n'y est que les noms des fichiers avec leur extension dans la CheckedListBox. Ensuite un label avec le chemin du dossier source.Après vous mettez un bouton pour créer un dossier de destination avec un label avec le chemin de destination.
Avec ce code dans un bouton:
 If CheckedListBox1.CheckedItems.Count <> 0 Then
            'S'il y a des éléments cochés une boucle balaye les éléments cochés 
            '(collection CheckedItems) et affiche le numéro de l'élément DANS LA LISTE toutes lignes.
            Dim i As Integer

            For i = 0 To CheckedListBox1.CheckedItems.Count - 1
                My.Computer.FileSystem.CopyFile(Lblsource.Text & "" & CheckedListBox1.CheckedItems(i).ToString, Lblcible.Text & "" & CheckedListBox1.CheckedItems(i).ToString)
            Next i
        End If

@+ Le Pivert
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

J'ai suivi à la lettre votre méthode et toujours cet erreur :
"Le format du chemin d'accès donné n'est pas pris en charge."
Mais cela vient peut-être de ma CheckedListBox ? Car elle affiche le chemin d'accès des fichiers (C\users\...\fichier.mp3)
Messages postés
7467
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
2 août 2021
125
Comme je vous l'ai expliqué, il ne faut que les noms des fichiers avec leur extension sinon cela ne fonctionne pas.
J'utilise une FilelistBox pour ouvrir les dossiers
Si vous ne l'avez pas allez dans Outils, choisir des élements dans la boite à outils et cocher FilelistBox. Ensuite mettez la dans votre Form

Il vous faudra 3 boutons
cmdopen_dossier, cmdcible, cmdcopy
3 label
lblsource, Lblcible, lblcount_1

Voici le code
Option Explicit On
Imports System.IO
Public Class Form1
    Dim i As Integer
    Private Sub cmdopen_dossier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen_dossier.Click
        Dim a As New FolderBrowserDialog
        If a.ShowDialog = Windows.Forms.DialogResult.OK Then
            lblsource.Text = "" & a.SelectedPath
            FileListBox1.Pattern = "*.*"
            FileListBox1.Path = lblsource.Text
        End If
        'on affiche les données de la FileListBox dans la CheckedListBox1
        For i = 0 To FileListBox1.Items.Count - 1
            CheckedListBox1.Items.Add(FileListBox1.Items(i))
        Next i
        lblcount_1.Text = CheckedListBox1.Items.Count 'on compte les fichiers
    End Sub
    Private Sub cmdcible_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcible.Click
        Dim Ofd As New System.Windows.Forms.FolderBrowserDialog
        Ofd.ShowDialog()
        Lblcible.Text = Ofd.SelectedPath
        If Lblcible.Text = "" Then
            MessageBox.Show("Opération annulée par l'utilisateur", "Ouverture", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
    End Sub
    Private Sub cmdcopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcopy.Click
        If lblsource.Text = Lblcible.Text Then 'si même chemin
            MessageBox.Show("Les répertoires entrés ne sont pas valides", "Copie impossible", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If
        If lblsource.Text "" Or Lblcible.Text "" Then 'si vide
            MessageBox.Show("Les répertoires entrés ne sont pas valides", "Copie impossible", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If
        If CheckedListBox1.CheckedItems.Count <> 0 Then
            'S'il y a des éléments cochés une boucle balaye les éléments cochés 
            '(collection CheckedItems) et affiche le numéro de l'élément DANS LA LISTE toutes lignes.
            Dim i As Integer
            For i = 0 To CheckedListBox1.CheckedItems.Count - 1
                My.Computer.FileSystem.CopyFile(lblsource.Text & "" & CheckedListBox1.CheckedItems(i).ToString, Lblcible.Text & "" & CheckedListBox1.CheckedItems(i).ToString, FileIO.UIOption.AllDialogs)
                'FileIO.UIOption.AllDialogs ouvre une boite de dialogue vous indiquant si le fichier existe déjà et si vous voulez le remplacer
            Next i
        End If
        MessageBox.Show("Opération terminée, vous trouverez votre dossier à cet emplacement: " & Lblcible.Text, "Copier", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub
End Class
Messages postés
13
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
3 août 2010

Ok ça fonctionne, merci beaucoup LePivert !