Renommer un fichier avec le nom de son dossier

Résolu
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 - 4 oct. 2010 à 17:35
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre 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 ?

8 réponses

raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 18:55
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
3
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 19:19
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
3
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 18:08
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
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 18:15
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.
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
4 oct. 2010 à 18:42
Bonjour,
Essaie avec cela:

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

@+Le Pivert
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
4 oct. 2010 à 19:06
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 ?
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
4 oct. 2010 à 19:14
Merci à tous, avec la correction de l'erreur ca marche perfecto.




Ma LV2 c'est le Visual Basic, et toi ?
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
4 oct. 2010 à 21:59
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 ?
0
Rejoignez-nous