Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
16 avril 2017 à 15:48
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
20 avril 2017 à 22:02
Bonjour tout le monde,
comme le nom l'indique cette application sert à renommer plusieurs fichiers en même temps
En cliquant sur le bouton 1 j'apporte dans la Listview qui contient Trois colonnes le nom, l'extension et le chemin d'accès du fichier
Privat Chemin_Dossier as String Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Dossier As New FolderBrowserDialog If Dossier.ShowDialog = Windows.Forms.DialogResult.OK Then Chemin_Dossier = Dossier.SelectedPath For Each Fichier As String In IO.Directory.GetFiles(Chemin_Dossier) Dim info As New IO.FileInfo(Fichier) ListViewFichier.Items.Add(New ListViewItem({info.Name.Replace(info.Name.Substring(info.Name.LastIndexOf(".")), "").Replace(info.Name.Substring(info.Name.LastIndexOf(".")), ""), info.Extension.Replace(".", ""), Fichier})) Next End If End Sub
En cliquant sur le bouton 2 tous les fichiers qui sont contenu dans la listview seront renommer de haut vers le bas de la liste
Privat Nouveau_Nom as String = "Im" 'Par exemple Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click For i As Integer = 0 To ListViewFichier.Items.Count - 1 My.Computer.FileSystem.RenameFile(ListViewFichier.Items(i).SubItems(2).Text, Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier Next End Sub
jusqu'à la tout fonctionne
j'ai remarqué que si un fichier à même Nom que le Nouveau Nom une erreur s'affiche (c'est plutôt logique car deux fichiers qui sont du même type, qui ont le même Nom et il sont dans le même dossier n'existe pas)
tout d'abord j'ai pensé à cette méthode
Privat Nouveau_Nom as String = "Im" 'Par exemple Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click For i As Integer = 0 To ListViewFichier.Items.Count - 1 If IO.File.Exists(ListViewFichier.Items(i).SubItems(2).Text) Then If IO.File.Exists(IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) Then My.Computer.FileSystem.RenameFile((IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text), Nouveau_Nom & "_1." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier For j As Integer = 0 To ListViewFichier.Items.Count - 1 If ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text Then ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "_1." & ListViewFichier.Items(i).SubItems(1).Text ListViewFichier.Items(j).SubItems(0).Text = Nouveau_Nom & i & "_1" Exit For End If Next End If My.Computer.FileSystem.RenameFile(ListViewFichier.Items(i).SubItems(2).Text, Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier End If Next End Sub
si le nom du fichier qui va être renommer existe déjà alors on ajoute "_1" à ce nom qui existe avant de continuer le renommage des fichiers
Privat Nouveau_Nom as String = "Im" 'Par exemple Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click For i As Integer = 0 To ListViewFichier.Items.Count - 1 If IO.File.Exists(ListViewFichier.Items(i).SubItems(2).Text) Then If IO.File.Exists(IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) Then My.Computer.FileSystem.RenameFile((IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text), Nouveau_Nom & i & "_1." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier For j As Integer = 0 To ListViewFichier.Items.Count - 1 If ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text Then ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "_1." & ListViewFichier.Items(i).SubItems(1).Text ListViewFichier.Items(j).SubItems(0).Text = Nouveau_Nom & i & "_1" Exit For End If Next End If My.Computer.FileSystem.RenameFile(ListViewFichier.Items(i).SubItems(2).Text, Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier End If Next End Sub
c'est vrai que l'erreur est évité mais le fichier avec le nom +"_1" ne sera pas renommer comme les autres fichier par exemple :
im 1, im 2, im 3, im 3_1 ,im 4 ...ect
normalement :
im 1, im 2, im 3, im 4 ,im 5 ...ect
j'ai aussi pensé à ça Mais sans succès
Privat Nouveau_Nom as String = "Im" 'Par exemple Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click For i As Integer = 0 To ListViewFichier.Items.Count - 1 If IO.File.Exists(ListViewFichier.Items(i).SubItems(2).Text) Then For j As Integer = 0 To ListViewFichier.Items.Count - 1 If ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text Then My.Computer.FileSystem.RenameFile(ListViewFichier.Items(j).SubItems(2).Text, Nouveau_Nom & i & "_1." & ListViewFichier.Items(j).SubItems(1).Text) ' Renomme le fichier ListViewFichier.Items(j).SubItems(2).Text = IO.Path.GetDirectoryName(ListViewFichier.Items(i).SubItems(2).Text) & "\" & Nouveau_Nom & i & "_1." & ListViewFichier.Items(i).SubItems(1).Text ListViewFichier.Items(j).SubItems(0).Text = Nouveau_Nom & i & "_1" Exit For End If Next My.Computer.FileSystem.RenameFile(ListViewFichier.Items(i).SubItems(2).Text, Nouveau_Nom & i & "." & ListViewFichier.Items(i).SubItems(1).Text) ' Renomme le fichier End If
Next End Sub
je demande votre aide pour m'éclairer sur l'erreur que j'ai fait
merci d'avance pour votre aide
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 16 avril 2017 à 19:04
Bonjour Karin.code
La listview est là pour afficher des données ( pas pour faire des manipulations sur ces données)
Et ceci est valable pour tous les contrôles en cas de "traitement lourd" . Si ce traitement n'utilise qu'une ou 2 lignes de codes dans la procédure on peut le faire directement sur le contrôle lui-même
Dans ton cas tu as une liste de fichiers avec 3 informations
- le chemin de ce fichier
- le nom de ce fichier
- l'extension de ce fichier
Pourquoi ne pas créer une list(of Fichiers) avec une classe Fichiers et travailler avec .
Une fois les noms changés tu affiches de nouveau la Listview modifiée .
Private class Fichiers Public Property Nom as String Public Property Extension as string Public Property Chemin as String End Class
De plus la class System.IO.File a les méthodes nécessaires pour estraire ces 2 informations directement sans passer par des LastIndex(of) pour rechercher le nom, l'extension et le chemin d'un fichier
Maintenant pour ton problème n'est-il pas plus judicieux de tester avant le renommage des fichiers si un nom de fichier est déjà égal au nouveau nom que l'on veut donner à tous les fichiers .
si c'est le cas on avertit l'utilisateur pour qu'il choisisse un autre nom
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 16 avril 2017 à 20:09
Salut vb95,
merci pour ta réponse
tout d'abord :
Pour la première remarque : j'utilise la ListView pour afficher des informations sur le dossier le nombre, le nom,le type des fichiers et bien sûr leur chemin d’accès.
je l'utilise aussi pour changer l'ordre des fichiers avec un bouton "UP" et un bouton "Down" (pour préciser qui sera le 1er fichier a être renommer, le 2eme fichier, le 3eme fichier ainsi de suite )
Pour la deuxième remarque : si c'est le cas ça sera beaucoup mieux que d'utiliser LastIndex(of) je vais faire des recherches
Pour la troisième remarque : ce n'est pas ce que j'ai fait ?
si le nom existe déjà, le fichier sera renommer provisoirement et il gardera son ordre dans la liste après il sera renommer de la même façon que tous les autres fichiers
je ne sais pas si j'ai bien expliqué, je vais essayer de mieux expliquer la prochaine fois si ce n'est pas le cas
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 Modifié le 16 avril 2017 à 21:24
Bonsoir Karin.code
Si j'ai bien compris tous les fichiers ont le même nom suivi d'un indice numérique : fichier1, fichier2, fichier3, etc.... une fois le renommage fait
Pour la première remarque dans Button2_Click tu utilises la listview pour aller chercher les noms, extensions et chemins des fichiers
Lorsque tu charges la listview tu crées la list(Of Fichiers) et ensuite tu travailles avec cette List(of ) au lieu de travailler avec les Items de la listview pour modifier les noms . Et en passant par System.IO tu as directement les 3 informations ( je me suis trompé ce n'est pas System.IO.File )
Une fois la modification faite tu recharges la listview
Pour le troisième point tu as raison mais il faut le faire en 2 étapes
1) tu vérifies en premier pour tous les fichiers si un fichier n'a pas le même nom que celui que tu veux donner . si c'est le cas tu lui changes le nom
2)Ensuite tu fais le changement de nom pour tous les fichiers
Autre chose : donne un nom ( propriété Name ) à tes boutons et autres contrôles car Button1 et Button2 ne sont guère parlants : RemplirListefichiers er Renommerfichier sont plus parlants
Petit détail : dans les 4 codes que tu as montré il manque un "e" au Private de la première ligne
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023 17 avril 2017 à 15:40
Bonjour Vb95,
désolé je n'ai pas pu te répondre plus tôt
j'ai suivi tes conseils et tu avais raison, on ne peut pas vérifier et renommer en même temps ça risquerait de Créer des erreurs, il faut les séparer en deux états :
la première est de vérifier si les nouveaux noms existe ou non, si c'est le cas les fichiers avec le même non seront renommer
la deuxième est de renommer tous les fichiers sans aucune vérification
Autre chose : donne un nom ( propriété Name ) à tes boutons et autres contrôles car Button1 et Button2 ne sont guère parlants : RemplirListefichiers er Renommerfichier sont plus parlants
j'ai déjà renommer tous les contrôles dans le projet original, j'utilise un autre projet pour des essais
Petit détail : dans les 4 codes que tu as montré il manque un "e" au Private de la première ligne
en fait le projet était assez long et les déclarations "Private" il était assez loin par rapport à l’événement "Bouton.Click", alors j'ai écrit manuellement ces déclarations, j'ai dû oublier le "e", merci pour la remarque
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018 17 avril 2017 à 16:31
Bojour Karin.code
tu dis pour la première étape : la première étape est de vérifier si les nouveaux noms existent ou non, si c'est le cas les fichiers avec le même nom seront renommés si tu renommes un fichier il faut refaire toute la vérification à nouveau pour ce fichier
Supposons
Tu veux renommer tes fichiers ainsi :Fich0, Fich1, Fich2, etc .....
Ton second fichier a le même nom qu'un fichier du renommage : Fich2
Tu le renommes Fich5
Deux cas peuvent se produire
- Le répertoire contient déjà un fichier Fich5
- Fich5 est un nom prévu pour le renommage
Donc lorsque tu renommes un fichier il faut vérifier qu'il n'existe pas déjà dans le répertoire et si ce nouveau nom n'est pas affecté à un nom de renommage .
C'est moins facile qu'il n'y paraît mais tous les cas sont à prendre en compte : cela peut marcher correctement pendant 2 mois et paf : un cas spécial comme les 2 cités plus haut et ça plante !
Va chercher le bug ensuite !!!!!!
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182
>
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023 17 avril 2017 à 20:21
Salut vb95,
c'est vrai dans ce cas c'est un problème mais quand j'ai dit renommer le fichier avec le même nom si il existe, ce n'est pas le renommer de Fich2 à Fich5 mais d'ajouter au nom un texte par exemple "_1"
mais maintenant que je l'écris je dit que même cette méthode pose problème parce-que si par exemple le Nom Fich2_1 existe déjà alors quand j'ajoute "_1" à Fich2 une erreur s'affiche qui dit que ce nom existe déjà
je vais suggérer une solution et dit moi si ça résout le problème ou non :
si je renomme tous les fichiers avec un nom spécial (impossible que quelqu'un pense à ce nom), par exemple "ExeRenoChanKarinCode", ça donnera ça :
ExeRenoChanKarinCode1, ExeRenoChanKarinCode2, ExeRenoChanKarinCode3 ..etc
après je renomme les fichiers avec le nom que j'ai choisi
ça sera une boucle après une boucle, personne ne sera que les fichiers étaient renommer avec au début avec le nom "ExeRenoChanKarinCode"
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137 18 avril 2017 à 11:38
Bonjour à tous,
Voici 2 exemples:
1er renomme avec un nom bidon (pour éviter le bug du même nom) et ensuite le bon nom
Très rapide
16 avril 2017 à 20:09
merci pour ta réponse
tout d'abord :
Pour la première remarque :
j'utilise la ListView pour afficher des informations sur le dossier le nombre, le nom,le type des fichiers et bien sûr leur chemin d’accès.
je l'utilise aussi pour changer l'ordre des fichiers avec un bouton "UP" et un bouton "Down" (pour préciser qui sera le 1er fichier a être renommer, le 2eme fichier, le 3eme fichier ainsi de suite )
Pour la deuxième remarque :
si c'est le cas ça sera beaucoup mieux que d'utiliser LastIndex(of) je vais faire des recherches
Pour la troisième remarque :
ce n'est pas ce que j'ai fait ?
si le nom existe déjà, le fichier sera renommer provisoirement et il gardera son ordre dans la liste après il sera renommer de la même façon que tous les autres fichiers
je ne sais pas si j'ai bien expliqué, je vais essayer de mieux expliquer la prochaine fois si ce n'est pas le cas
Modifié le 16 avril 2017 à 21:24
Si j'ai bien compris tous les fichiers ont le même nom suivi d'un indice numérique : fichier1, fichier2, fichier3, etc.... une fois le renommage fait
Pour la première remarque dans Button2_Click tu utilises la listview pour aller chercher les noms, extensions et chemins des fichiers
Lorsque tu charges la listview tu crées la list(Of Fichiers) et ensuite tu travailles avec cette List(of ) au lieu de travailler avec les Items de la listview pour modifier les noms . Et en passant par System.IO tu as directement les 3 informations ( je me suis trompé ce n'est pas System.IO.File )
Une fois la modification faite tu recharges la listview
Pour le troisième point tu as raison mais il faut le faire en 2 étapes
1) tu vérifies en premier pour tous les fichiers si un fichier n'a pas le même nom que celui que tu veux donner . si c'est le cas tu lui changes le nom
2)Ensuite tu fais le changement de nom pour tous les fichiers
Autre chose : donne un nom ( propriété Name ) à tes boutons et autres contrôles car Button1 et Button2 ne sont guère parlants : RemplirListefichiers er Renommerfichier sont plus parlants
Petit détail : dans les 4 codes que tu as montré il manque un "e" au Private de la première ligne
17 avril 2017 à 15:40
désolé je n'ai pas pu te répondre plus tôt
j'ai suivi tes conseils et tu avais raison, on ne peut pas vérifier et renommer en même temps ça risquerait de Créer des erreurs, il faut les séparer en deux états :
la première est de vérifier si les nouveaux noms existe ou non, si c'est le cas les fichiers avec le même non seront renommer
la deuxième est de renommer tous les fichiers sans aucune vérification
Autre chose : donne un nom ( propriété Name ) à tes boutons et autres contrôles car Button1 et Button2 ne sont guère parlants : RemplirListefichiers er Renommerfichier sont plus parlants
j'ai déjà renommer tous les contrôles dans le projet original, j'utilise un autre projet pour des essais
Petit détail : dans les 4 codes que tu as montré il manque un "e" au Private de la première ligne
en fait le projet était assez long et les déclarations "Private" il était assez loin par rapport à l’événement "Bouton.Click", alors j'ai écrit manuellement ces déclarations, j'ai dû oublier le "e", merci pour la remarque
17 avril 2017 à 16:31
tu dis pour la première étape : la première étape est de vérifier si les nouveaux noms existent ou non, si c'est le cas les fichiers avec le même nom seront renommés
si tu renommes un fichier il faut refaire toute la vérification à nouveau pour ce fichier
Supposons
Tu veux renommer tes fichiers ainsi :Fich0, Fich1, Fich2, etc .....
Ton second fichier a le même nom qu'un fichier du renommage : Fich2
Tu le renommes Fich5
Deux cas peuvent se produire
- Le répertoire contient déjà un fichier Fich5
- Fich5 est un nom prévu pour le renommage
Donc lorsque tu renommes un fichier il faut vérifier qu'il n'existe pas déjà dans le répertoire et si ce nouveau nom n'est pas affecté à un nom de renommage .
C'est moins facile qu'il n'y paraît mais tous les cas sont à prendre en compte : cela peut marcher correctement pendant 2 mois et paf : un cas spécial comme les 2 cités plus haut et ça plante !
Va chercher le bug ensuite !!!!!!
17 avril 2017 à 20:21
c'est vrai dans ce cas c'est un problème mais quand j'ai dit renommer le fichier avec le même nom si il existe, ce n'est pas le renommer de Fich2 à Fich5 mais d'ajouter au nom un texte par exemple "_1"
mais maintenant que je l'écris je dit que même cette méthode pose problème parce-que si par exemple le Nom Fich2_1 existe déjà alors quand j'ajoute "_1" à Fich2 une erreur s'affiche qui dit que ce nom existe déjà
je vais suggérer une solution et dit moi si ça résout le problème ou non :
si je renomme tous les fichiers avec un nom spécial (impossible que quelqu'un pense à ce nom), par exemple "ExeRenoChanKarinCode", ça donnera ça :
ExeRenoChanKarinCode1, ExeRenoChanKarinCode2, ExeRenoChanKarinCode3 ..etc
après je renomme les fichiers avec le nom que j'ai choisi
ça sera une boucle après une boucle, personne ne sera que les fichiers étaient renommer avec au début avec le nom "ExeRenoChanKarinCode"