Changer de fichier

Résolu
Utilisateur anonyme - 28 mai 2008 à 18:41
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 - 29 mai 2008 à 13:42
Bonjour,

Je désire faire un programme pour renommer de fichier, mais je ne sais pas comment "passer" d'un fichier à un autre non renommé,

J'ai fait un getfiles pour charger tous les fichiers, et je ne sais absolument pas comment "passer" de l'un a l'autre sans risquer de tomber dans une boucle où il renomme un fichier, puis un autre, puis le premier, puis le second, puis le premier...

Si quelqu'un pouvait m'expliquer comment sortir certains fichier du getfiles ou passer d'un fichier à un autre ou une solution alternative .

Voila le problème,
Merci d'avance pour toutes les réponses.

7 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
28 mai 2008 à 18:57
Salut,

Moi pas comprendre..."passer" de l'un a l'autre sans risquer de tomber dans
une boucle où il renomme un fichier, puis un autre, puis le premier,
puis le second, puis le premier... ???

Voici un code qui renomme tous les fichier présent dans C:\ en ajoutant "nouveau" au début de leur nom (j'ai pas testé):

        Dim files() As String = IO.Directory.GetFiles("C:")
        For Each file As String In files
            Dim dossier As String = IO.Path.GetDirectoryName(file)
            Dim fichier As String = IO.Path.GetFileName(file)
            Dim nouveauNom As String = IO.Path.Combine(dossier, "nouveau " & fichier)
            IO.File.Move(file, nouveauNom)
        Next
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
28 mai 2008 à 19:06
Salut,

Voici deux autres exemples de code possible :

Le premier exclus les sous-dossiers :

For Each files As String In My.Computer.FileSystem.GetFiles("C:\Temp", FileIO.SearchOption.SearchTopLevelOnly)
    ' FileIO.SearchOption.SearchTopLevelOnly cherche uniquement dans ce dossier en excluant les sous-dossiers
     Dim Fi As New System.IO.FileInfo(files) ' Instanciation du fichier trouvé
     My.Computer.FileSystem.RenameFile(files, "nouveau" + Fi.Name) ' Renomme le fichier
    ' files contient le chemin d'accès du fichier à renommer
    ' Fi.Name contient le nom du fichier (par exemple, C:\test.jpeg >>> Fi.Name retourne test.jpeg)
Next

Le deuxième inclus les sous-dossiers

For Each files As String In My.Computer.FileSystem.GetFiles("C:\Temp", FileIO.SearchOption.SearchAllSubDirectories)
    ' FileIO.SearchOption.SearchAllSubDirectories cherche dans ce dossier en incluant les sous-dossiers
     Dim Fi As New System.IO.FileInfo(files) ' Instanciation du fichier trouvé
     My.Computer.FileSystem.RenameFile(files, "nouveau" + Fi.Name) ' Renomme le fichier
    ' files contient le chemin d'accès du fichier à renommer
    ' Fi.Name contient le nom du fichier (par exemple, C:\test.jpeg >>> Fi.Name retourne test.jpeg)
Next

++
----------------------------------
Si la réponse vous convient : Réponse Acceptée
3
Utilisateur anonyme
28 mai 2008 à 19:11
Merci beaucoup
0
Utilisateur anonyme
28 mai 2008 à 19:18
Moi pas comprendre...


"passer" de l'un a l'autre sans
risquer de tomber dans une boucle où il renomme un fichier, puis un
autre, puis le premier, puis le second, puis le premier... ???







Pour info Kévin :
Je sais j'étais pas très clair sur ce point, mais je voyais pas trop comment le tourner autrement :
Je voulais pas qu'il renomme un fichier, puis qu'il le renomme encore, puis encore et ainsi de suite. C'est mieux dit ainsi ?
0

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

Posez votre question
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
28 mai 2008 à 20:31
Je voulais pas qu'il renomme un fichier, puis qu'il le renomme encore, puis encore et ainsi de suite. C'est mieux dit ainsi ?

On appelle cà une boucle infinie c'est à dire une boucle dont la condition sera toujours vraie.

Exemple :






Dim Counter As Integer = 0

While Counter >= 0





  
Counter += 1














End While



La condition est toujours vraie.

++
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
28 mai 2008 à 23:18
Dim Counter As Integer = 0












While Counter >= 0










   Counter += 1










End While






La condition est toujours vraie.

Nop, ta boucle tournera un peu plus de 2.1 milliards de fois et s'arêtera
Pour faire une boucle infinie, le plus simple est d'utiliser un Do.. Loop.

"Je voulais pas qu'il renomme un fichier, puis qu'il le renomme encore, puis encore et ainsi de suite. C'est mieux dit ainsi ?"

Beaucoups mieux
Il est plus compliqué de renommer chaque fichier plusieurs fois que de passer une fois sur chaque fichier
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
29 mai 2008 à 13:42
Salut,

Nop, ta boucle tournera un peu plus de 2.1 milliards de fois et s'arêtera

Oui c'est vrai, c'était pour le principe. Mais effectivement, la boucle va tourner précisément jusqu'à 2 147 483 647 et elle s'arrêtera.

++
0
Rejoignez-nous