GetFileName pour MAJ de fichier.exe

Signaler
-
 swohard -
Bonjour à tous.

Je souhaiterai récupérer le nom d'un fichier .exe pour pourvoir le renommer dans une "norme" de nom de fichier avant de le copier.

My.Computer.FileSystem.RenameFile("C:\Test.txt", "SecondTest.txt")


Mais
"C:\Test.txt"
me gêne car lors d'une prochaine mise à jour du fichier.exe pour une nouvelle version, souvent les noms de fichiers changent. Par conséquent, le Test.txt ne sera plus valable et l'application de marchera plus.

J'essaye de trouver un moyen pour récupérer le nom du fichier avec son extension autre que de l'indiquer directement comme suggère MSDN...

J'ai repris un bout de code pour cheminfichier et textFichier qui marchait précédemment, mais là, ma variable textFichier ne récupère pas le nom du fichier (ma MsgBox 2 est vide):
Private Sub ZipexeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZipexeToolStripMenuItem.Click

        Dim textToolStripMenu As String
        Dim textFichier As String

        'remplaces le texte du fichier par le texte du label sélectionné
        cheminfichier = tView_Serveur.SelectedNode.FullPath
        MsgBox("1" & cheminfichier)
        textFichier = Mid(cheminfichier, InStrRev(cheminfichier, "") + 1)
        MsgBox("2" & textFichier)
        textToolStripMenu = ZipexeToolStripMenuItem.Text
        MsgBox("3" & textToolStripMenu)

        My.Computer.FileSystem.RenameFile(textFichier, textToolStripMenu)

        'PUIS retires "le nom du fichier.exe" de la liste ToolSripMenus
    End Sub


Est-ce que vous aurez une autre méthode pour résoudre ce problème?
Merci par avance.

10 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Bonjour,

Je n'ai pas tout compris mais pour faire des manipulations de nom de fichiers utilise les fonctions de System.IO.Path
Dim nomFichier As String = System.IO.Path.GetFileNameWithoutExtension("Z:\Rep\MonPetitFichier.exe")


Je sais pas si c'est ce que tu veux.

_____________
Kenji
L'application que je met en place devra installer des programmes silencieusement après avoir choisit lesquel parmi une liste. Une liste qui apparaît dans un treeview et qui sera certainement modifiée lorsque je vais devoir mettre à jour les logiciels.
Mais avant de les installer, je souhaiterai renommer les fichiers.exe dans une "norme" de nom de fichier (Firefox Setup 16.0.2.exe firefox.exe; 7z920.exe 7zip.exe; GlaryUtilitiesSetup.exe = glaryutilities.exe). Pour cela, dans mon Treeview, lorsque je clique droit sur un fichier, j'ai accès à un ContextStripMenu "Renommer" avec un ToolStripMenu qui donne une liste de nom de fichier avec extension.

Voilà comment ça doit s'organiser:
Select Case NomFichier
Case "7zip.exe" 'si "7zip.exe" est sélectionné
ALORS remplaces le texte du fichier par le texte du ToolSripMenu sélectionné
PUIS retires "7zip.exe" de la liste ToolSripMenu
Case "firefox.exe"
ALORS remplaces le texte du fichier par le texte du ToolSripMenu sélectionné
PUIS retires "firefox.exe" de la liste ToolSripMenu
Case "7zip.exe"
ALORS remplaces le texte du fichier par le texte du ToolSripMenu sélectionné
PUIS retires "7zip.exe" de la liste ToolSripMenu
Case "glaryutilities.exe"
ALORS remplaces le texte du fichier par le texte du ToolSripMenu sélectionné
PUIS retires "glaryutilities.exe" de la liste ToolSripMenu
...


Il ne faut pas que je définisse le nom du fichier ("MonPetitFichier.exe"):
Par exemple, lorsque je vais vouloir faire une mise au jour du logiciel 7zip, son nom ne sera plus 7z920.exe mais 7z1520.exe. Donc si je rentre dans le code My.Computer.FileSystem.RenameFile("C:\7z920.exe", "7zip.exe") il ne prendra pas en compte que le nom de 7z920.exe a changé, il trouvera rien et le programme plantera.

C'est pour ça qu'il faut que je trouve un autre moyen de récupérer le nom du fichier actuel sélectionné. Car le programme ne sera pas quel nom de fichier il va récupérer puisque les nom de fichier ne sont jamais fixes.

J'ai essayé avec ça :
textFichier = Mid(cheminfichier, InStrRev(cheminfichier, "") + 1)

au lieu de ça:
Dim fileName As String = "C:\7z920.exe"
Dim name As String = System.IO.Path.GetFileName(fileName)


mais sans succès.
C'est un peu dur de bien expliquer Merci d'essayer
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Donc un truc comme ca :

Dim fileName As String = "Z:\Rep\7z1520.exe"
Dim name As String = System.IO.Path.GetFileNameWithoutExtension(fileName).ToLower()

If name.StartsWith("7z") Then
  My.Computer.FileSystem.RenameFile(fileName, "7zip.exe")
ElseIf name.StartsWith("firefox setup") Then
  My.Computer.FileSystem.RenameFile(fileName, "firefox.exe")
'ElseIf ...
End If


Mais il faut être sûr que les nom originaux ont toujours le même format.

_____________
Kenji
Oui, ce serait ça à peu près. Sauf qu'il faut que j'anticipe totalement le faite les nom originaux n'auront pas toujours le même format... Et sur le coup là, je sèche
Ton idée est vraiment bonne, il j'étais sûre oui, comme tu le dis...
J'aurais bien une autre idée, mais le problème est que dans mon code

Private Sub ZipexeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZipexeToolStripMenuItem.Click

        Dim textToolStripMenu As String
        Dim textFichier As String

        'remplaces le texte du fichier par le texte du label sélectionné
        cheminfichier = tView_Serveur.SelectedNode.FullPath
        MsgBox("1" & cheminfichier)
        textFichier = Mid(cheminfichier, InStrRev(cheminfichier, "") + 1)
        MsgBox("2" & textFichier)
        textToolStripMenu = ZipexeToolStripMenuItem.Text
        MsgBox("3" & textToolStripMenu)

        My.Computer.FileSystem.RenameFile(textFichier, textToolStripMenu)

        'PUIS retires "le nom du fichier.exe" de la liste ToolSripMenus
    End Sub


quand je fais "cheminfichier = tView_Serveur.SelectedNode.FullPath" je n'arrive même pas à récupérer le chemin en entier. Il me retourne le chemin mais sans le nom du fichier sélectionné... Est-ce que c'est le click droit qui fait qu'il est considéré comme non sélectionné? Parce qu'avec un click normal, il me retourne le chemin en entier...
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
SelectedNode.FullPath retourne le chemin composé par le nom des nœuds du nœud principal jusqu'au nœud sélectionné. Il faut que tu t'assure que ce chemin correspond bien à un chemin de fichier.

_____________
Kenji
Pourtant c'est le cas, il correspond bien à un chemin de fichier ^^. Je l'ai utilisé un peu plus haut dans mon code, et il marche très bien. C'est pour ça que j'accuse le click droit d'empêcher la sélection.
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Comment fais tu apparaitre ton menu ?
Si tu l'as mis directement dans la propriété ContextMenuStrip de ton TreeView, utilise plutôt l'évènement NodeMouseClick pour le faire apparaitre.

Dans le cas actuel, si un nœud est sélectionné et que tu effectue un clique droit sur un autre nœud, c'est le premier nœud reste sélectionné.

_____________
Kenji
C'est ce que j'ai pensé oui Je suis tombée sur le même sujet mais en C#, il parlais de l'évènement click droit. Ca m'est pas venu à l'esprit... Je vais regarder ça! Je te redis ça après. Merci