Je suis débutant en VB et je souhaiterais faire un petit programme permettant de copier des fichiers vers un autre répertoire, l'intérêt est moindre mais devrais me permettre d'apprendre quelques notions.
Je bloque sur cette étape :
J'ai une listbox qui m'affiche le chemin\NomFichier d'un ou plusieurs fichiers préalablement sélectionné dans un OpenFileDialog et une seconde listbox qui ne m'affiche que les noms de fichiers + la taille (en octects, ko, mo etc)
J'ai un bouton qui me permet, en sélectionnant un ou plusieurs fichiers de la première listbox, de les supprimer dans cette première listbox et qui devrais supprimer les lignes correspondante dans la seconde listbox.
Le problème est que dans la seconde listbox, uniquement le dernier fichier ajouté est supprimé. Je dois avoir un problème dans une variable qui ne récupère pas le bon nom de fichier ou autre, mais je n'arrive pas à mettre le doigt dessus ...
Si vous avez des pistes à me donner je suis preneur !
Voici la partie qui me pose problème :
Private Sub btn_supp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_supp.Click
'Bouton Supprimer
'Supprime de la ListBox lb_files le ou les fichiers sélectionnés
If Not Me.lb_files.SelectedItem Is Nothing Then
For Each Items In lb_files.SelectedItem
KoMoGo()
Me.lb_files.Items.Remove(Me.lb_files.SelectedItem)
' Supprime de la ListBox lb_taille le ou les fichiers sélectionnés
' !!!!!! Ne supprime que le dernier fichier ajouté !!!!!
Dim File As String = System.IO.Path.GetFileName(FileNames)
MsgBox(File)
Me.lb_taille.Items.Remove(File & " " & OctetsToKoMoGo)
Next
Else
MsgBox("Selectionnez au moins un fichier à supprimer")
End If
End Sub
Voici le code complet (Attention ça risque de faire peur, je débute !) :
Code Visual Basic :
Imports System.Math
Public Class filearchiver
Public dlg_Open As OpenFileDialog, dlg_Destination As New FolderBrowserDialog, Path As String, FileNames As String, Taille As String, TB, File, OctetsToKoMoGo
Private Sub btn_ajouter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ajouter.Click
Dim Addition As Integer = 0
'Bouton Ajouter
'Propriétés de OpenFileDialog : dlg_Open
dlg_Open = New OpenFileDialog()
dlg_Open.InitialDirectory = "C:"
dlg_Open.Title = "Selection du fichier à archiver"
dlg_Open.Filter = "Tous|*.*|Images|*.bmp;*.gif;*.jpg;*.png|PDF|*.pdf|Texte|*.txt|Excel|*.xls;*.xlsx|Word|*.doc;*.docx"
dlg_Open.DefaultExt = "Tous"
dlg_Open.AddExtension = True
dlg_Open.CheckFileExists = False
dlg_Open.Multiselect = True
dlg_Open.ShowDialog()
'Ajoute le chemin des fichiers sélectionnez dans la ListBox : lb_files
'Ajoute le nom du fichier et sa taille dans la ListBox : lb_taille
For Each Me.FileNames In dlg_Open.FileNames
lb_files.Items.Add(FileNames)
Taille = FileLen(FileNames)
KoMoGo()
Dim File As String = System.IO.Path.GetFileName(FileNames)
lb_taille.Items.Add(File & " " & OctetsToKoMoGo)
'Ajout de la taille totale des fichiers sélectionné dans le label : lbl_total
' !!!!!! Option a corriger, ne prend pas en compte l'ajout de nouveaux fichiers !!!!!!
Addition += Taille
lbl_total.Text = Addition
Next
End Sub
Private Sub btn_supp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_supp.Click
'Bouton Supprimer
'Supprime de la ListBox lb_files le ou les fichiers sélectionnés
If Not Me.lb_files.SelectedItem Is Nothing Then
For Each Items In lb_files.SelectedItem
KoMoGo()
Me.lb_files.Items.Remove(Me.lb_files.SelectedItem)
' Supprime de la ListBox lb_taille le ou les fichiers sélectionnés
' !!!!!! Option a corriger, ne supprime que le dernier fichier ajouté !!!!!
Dim File As String = System.IO.Path.GetFileName(FileNames)
Me.lb_taille.Items.Remove(File & " " & OctetsToKoMoGo)
Next
Else
MsgBox("Selectionnez au moins un fichier à supprimer")
End If
End Sub
Private Sub btn_destination_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_destination.Click
'Bouton Destination
'Permet de sélectionner le répertoire de destination ou seront archivé/sauvegardé les fichiers sélectionnez plus haut
tb_destination.Text = ""
dlg_Destination.RootFolder = Environment.SpecialFolder.Desktop
dlg_Destination.ShowDialog()
'Ajoute le chemin de destination dans la TextBox tb_destination
tb_destination.AppendText(dlg_Destination.SelectedPath)
Path = dlg_Destination.SelectedPath
End Sub
Private Sub btn_archiver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_archiver.Click
If Not Me.FileNames Is Nothing Then
'Si au moins un fichier est sélectionné
If Not Me.Path Is Nothing Then
'Si un répertoire de destination est indiqué
For Each Me.FileNames In lb_files.Items
Dim File As String = System.IO.Path.GetFileName(FileNames)
'Pour chaque FileNames sélectionnés dans dlg_Open, on va retirer le chemin et ne garder que le nom et l'extension du fichier
'Copie le fichier avec son chemin vers le chemin sélectionné dans dlg_Destination \ "Nom du fichier" - sans le chemin
If System.IO.File.Exists(Path & "" & File) Then
'Si le fichier existe déjà dans le répertoire d'archivage, passe au fichier suivant
MsgBox("Le fichier " & File & " existe déjà.")
On Error Resume Next
Else
'Si le fichier n'est pas encore présent dans le répertoire d'archivage, procède à la copie
System.IO.File.Copy(FileNames, Path & "" & File)
End If
Next
MsgBox("Archivage terminé.")
Else
'Si aucun répertoire de destination n'est sélectionné, affiche ce message
MsgBox("Merci de sélectionner un répertoire de destination.")
End If
Else
'Si aucune fichier n'est sélectionné, affiche ce message
MsgBox("Merci de sélectionner au moins un fichier à archiver.")
End If
End Sub
Sub KoMoGo()
'Fonction permettant de convertir la taille des fichiers (octets) en Ko, Mo ou Go
If Taille < 1024 Then ' - d'1 Ko
OctetsToKoMoGo = Taille & " Octets"
ElseIf Taille >= 1024 And Taille < 1048576 Then ' Entre 1 Ko et 1023Ko
OctetsToKoMoGo = Round((Taille / 1024), 2) & " Ko"
ElseIf Taille >= 1048576 And Taille < 1073741824 Then 'Entre 1 Mo et 1023 Mo
OctetsToKoMoGo = Round((Taille / 1048576), 2) & " Mo"
ElseIf Taille >= 1073741824 And Taille < 1099511627776 Then 'Entre 1 Go et 1023 Go
OctetsToKoMoGo = Round((Taille / 1073741824), 2) & " Go"
End If
End Sub
End Class
Oui je sais.
Ne pouvant éditer le sujet et après avoir été rabroué (et justement) par un administrateur pour avoir ouvert un sujet comportant deux questions, une des questions ayant trouvées une réponse, je viens poser ma deuxième question dans un second sujet.