Renommer un fichier avec le nom de son dossier [Résolu]

cs_aus3004 319 Messages postés jeudi 1 avril 2010Date d'inscription 16 mars 2011 Dernière intervention - 4 oct. 2010 à 17:35 - Dernière réponse : cs_aus3004 319 Messages postés jeudi 1 avril 2010Date d'inscription 16 mars 2011 Dernière intervention
- 4 oct. 2010 à 21:59
Bonjour, voila le titre explique tout je souhaite que les fichiers soient renommés avec le même nom que le dossier dans lequel ils sont.

Ex : je transforme C:\vb\net.txt en C:\vb\vb.txt

C'est pas très facile de trouver ca sur le net, c'est assez spécifique et pas beaucoup de site traitent le sujet.

J'ai :
For Each files In My.Computer.FileSystem.GetFiles("C:\dossier1\fichier1", FileIO.SearchOption.SearchAllSubDirectories)
                Dim Fi As FileInfo
                My.Computer.FileSystem.RenameFile(files, Fi.DirectoryName & Fi.Extension)
            Next

Mais j'ai l'erreur la référence d'objet n'est pas définie à une instance.

Zavez pas une idée ?
Merci


Ma LV2 c'est le Visual Basic, et toi ?
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
raffika 269 Messages postés dimanche 31 mai 2009Date d'inscription 12 mars 2011 Dernière intervention - 4 oct. 2010 à 18:55
3
Merci
Petite erreur dans mon code encore que
m'a fait remarqué Le Pivert
[code=vb] My.Computer.FileSystem.RenameFile(ListBox1.Items.Item(i), nomfich)[code]
Salutations

Merci raffika 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de raffika
Meilleure réponse
raffika 269 Messages postés dimanche 31 mai 2009Date d'inscription 12 mars 2011 Dernière intervention - 4 oct. 2010 à 19:19
3
Merci
Oui donc : premièrement "\aaa",
l'erreur te l'explique d'ailleur,
tu ne peux pas mettre de chemin dans le deuxième (ou paramètre)
argument de RenameFile (visual basic l'appelle newname),
donc pas de \ dans ce paramètre, juste le nom du fichier, par exemple
fichierdest.txt ...
Ensuite, nomfich dans mon code, permet
de définir justement le nom du fichier destination,
le nom de fichier défini par le renommage.
Donc voici la structure du deuxième argument :
table(table.Count - 2) & ".txt"
table(table.Count - 2) '' Renvoie le dossier le plus
haut dans l'arboresence, par exemple si le fichier
à renommer a pour chemin :
c:\Documents\Documents-Texte\fichierarenommer.txt,
c'est Documents-Texte qui sera renvoyé par
table(table.Count - 2) '' Comme expliqué dans mes commentaires
'' De la Sub que je t'ai donnée
Ennsuite on rajoute à Documents-Texte '.txt'
Sinon, on perd l'extension.
Donc dans ton code remplace juste la partie d'instruction RenameFile par :
My.Computer.FileSystem.RenameFile(ListBox1.Items.Item(i), My.Computer.FileSystem.CurrentDirectory & table(table.count-1-1) & ".TXT")
Donc pas de \ dans l'argument newName.
Si tu veux mettre le résultat dans un dossier ( comme ..\aaa\ ),
utilise plutot MoveFile ou CopyFile
Salut

Merci raffika 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de raffika
raffika 269 Messages postés dimanche 31 mai 2009Date d'inscription 12 mars 2011 Dernière intervention - 4 oct. 2010 à 18:08
0
Merci
Salut, j'avais un code pour faire ça :
 Sub modif()
        For Each foundFile As String In My.Computer.FileSystem.GetFiles(My.Computer.FileSystem.CurrentDirectory & "\Source", FileIO.SearchOption.SearchAllSubDirectories, "*.txt")
            '' Boucle Tant Que fichier trouvés dans 1 er argument avec le filtre du 2eme argument                                                           
            ListBox1.Items.Add(foundFile)
        Next
        Label1.Text = ListBox1.Items.Count & " fichiers trouvés"

        For i = 0 To ListBox1.Items.Count - 1
            Dim nomfich As String '' Sera le nom du fichier destination

            Dim table() As String = Split(ListBox1.Items.Item(i), "") '' Découpe le chemin du fichier
            ' par les \

            nomfich = table(table.Count - 1 - 1) ' Le nom de fichier résultat est :
            '' par exemple : c:\drivers\vb.net\unfichier.txt
            ''                0       1      2 3
            '' Donc dans le tableau table
            ''table(0) renvoie c: table (1) renvoie drivers table(2) renvoie vb.net
            '' et table(3) renvoie unfichier.txt
            ''table.count dans ce cas est égal à 4 (4 éléments)
            '' donc on vise ici le premier élément en partant de la droite
            '' donc -1 et encore -1 car de base 0

            nomfich &= ".txt" '' ici on rajoute l'extension
            '' pour faire un filemove :

            My.Computer.FileSystem.MoveFile(ListBox1.Items.Item(i), My.Computer.FileSystem.CurrentDirectory & "\Destination" & nomfich)
            '' Déplace le fichier '1er argument' vers le fichier '2eme argument'

            'Ou plus approprié :
            My.Computer.FileSystem.RenameFile(ListBox1.Items.Item(i), My.Computer.FileSystem.CurrentDirectory & "\Destination" & nomfich)

        Next

    End Sub


A vérifier et les dossiers Sources et Destination doivent changer,
mais si tu as plusieurs fichiers .txt
Il auront tous le même nom !!
Bonne prog
Commenter la réponse de raffika
raffika 269 Messages postés dimanche 31 mai 2009Date d'inscription 12 mars 2011 Dernière intervention - 4 oct. 2010 à 18:15
0
Merci
PS : Petite erreur :
        For Each foundFile As String In My.Computer.FileSystem.GetFiles(My.Computer.FileSystem.CurrentDirectory & "\Source", FileIO.SearchOption.SearchAllSubDirectories, "*.txt")
            '' Boucle Tant Que fichier trouvés dans 1 er argument avec le filtre du 3eme argument (*.txt) 

Le deuxième argument servant à définir si la recherche des fichiers
doit s'effectuer dans tous les sous-dossiers ou seulement dans le 'root' du dossier.
Commenter la réponse de raffika
cs_Le Pivert 5439 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 octobre 2018 Dernière intervention - 4 oct. 2010 à 18:42
0
Merci
Bonjour,
Essaie avec cela:

        My.Computer.FileSystem.RenameFile("C:\dossier1\fichier1.txt", "dossier1" & "." & "txt") 'on renomme

@+Le Pivert
Commenter la réponse de cs_Le Pivert
cs_aus3004 319 Messages postés jeudi 1 avril 2010Date d'inscription 16 mars 2011 Dernière intervention - 4 oct. 2010 à 19:06
0
Merci
Salut !

@Le Pivert, je ne connais pas le nom du dossier du fichier, donc pas d’intérêt...
@raffika, ton code à l'air plutôt bien mais je galère un petit peu.
Dans ma listbox, les fichiers sont chargés avec :
For Each files In My.Computer.FileSystem.GetFiles("C:\dossier", FileIO.SearchOption.SearchAllSubDirectories)
                    ListBox1.Items.Add(files)
                Next

Donc je peux virer du code cette partie du code :
For Each foundFile As String In My.Computer.FileSystem.GetFiles(My.Computer.FileSystem.CurrentDirectory & "\Source", FileIO.SearchOption.SearchAllSubDirectories, "*.txt")                                                       
            ListBox1.Items.Add(foundFile)
        Next

Après pas besoin de ca
nomfich &= ".txt" '' ici on rajoute l'extension

vu qu'il garde automatiquement son extension dans mes tests.

Je peux virer ca vu que je n'ai pas besoin de supp le fichier
My.Computer.FileSystem.MoveFile(ListBox1.Items.Item(i), My.Computer.FileSystem.CurrentDirectory & "\Destination" & nomfich)

Il reste donc l'essentiel !!!!!!
For i = 0 To ListBox1.Items.Count - 1
                Dim nomfich As String
                Dim table() As String = Split(ListBox1.Items.Item(i), "")
                nomfich = table(table.Count - 1 - 1)
                My.Computer.FileSystem.RenameFile(ListBox1.Items.Item(i), My.Computer.FileSystem.CurrentDirectory & "\aaa" & nomfich)
            Next


Mais j'ai un msg d'erreur
L'argument 'newName' doit être un nom et non un chemin d'accès relatif ou absolu : 'C:\Users\Nicolas\Documents\Visual Studio 2008\Projects\File Rename Tools\File Rename Tools\bin\Debug\aaa\aaa'. Nom du paramètre : newName

Problemo


Ma LV2 c'est le Visual Basic, et toi ?
Commenter la réponse de cs_aus3004
cs_aus3004 319 Messages postés jeudi 1 avril 2010Date d'inscription 16 mars 2011 Dernière intervention - 4 oct. 2010 à 19:14
0
Merci
Merci à tous, avec la correction de l'erreur ca marche perfecto.




Ma LV2 c'est le Visual Basic, et toi ?
Commenter la réponse de cs_aus3004
cs_aus3004 319 Messages postés jeudi 1 avril 2010Date d'inscription 16 mars 2011 Dernière intervention - 4 oct. 2010 à 21:59
0
Merci
Pour ceux qui sont intéressé par le code, voila le dernier correctif fonctionnel à 100% :

Try
            For i = 0 To ListBox1.Items.Count - 1
                Dim nomfich As String
                Dim table() As String = Split(ListBox1.Items.Item(i), "")
                nomfich = table(table.Count - 1 - 1) ' Le nom de fichier résultat est donc le dernier dossier sans l'extension
                Dim t() As String
                t = Split(ListBox1.Items.Item(i), ".") 'par les . 
                ' donc maintenant l'extension est dans t(t.count-1) 
                My.Computer.FileSystem.RenameFile(ListBox1.Items.Item(i), nomfich & "." & t(t.Count - 1))
            Next
        Catch ex As Exception
            MsgBox("Echec lors de la modification, l'erreur est la suivante : " & ex.Message)
        End Try


PS : la listbox se charge de fichier avec un :
For Each files In My.Computer.FileSystem.GetFiles("C:\dossier", FileIO.SearchOption.SearchAllSubDirectories)
                    ListBox1.Items.Add(files)
                Next


Ma LV2 c'est le Visual Basic, et toi ?
Commenter la réponse de cs_aus3004

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.