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

Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
- - Dernière réponse : cs_aus3004
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
- 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
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Dernière intervention
12 mars 2011
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de raffika
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Dernière intervention
12 mars 2011
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de raffika
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Dernière intervention
12 mars 2011
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
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Dernière intervention
12 mars 2011
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
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
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
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
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
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
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
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
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.