begin process at 2013 05 23 05:00:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Copie de fichiers .exe via des Treeviews


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copie de fichiers .exe via des Treeviews

lundi 22 octobre 2012 à 16:24:09 | Copie de fichiers .exe via des Treeviews

swohard



Voilà ce que je veux faire en .Net:

1. Sélectionner un (les) fichier(s) .exe ou .msi dans un Treeview.
2. Cliquer sur le bouton Add.
3. Faire un FileCopy du (des) fichier(s) sélectionné(s) vers le dossier temporaire du PC.

A priori, rien de bien compliqué. Seulement, j'ai commencé le VB.Net il y a peu de temps, et ça fait plusieurs jours maintenant que je suis penchée sur ce problème, je piétine.

Voici le code:
Code Visual Basic :
    Private Sub btn_Transfert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
        Dim Node As System.Windows.Forms.TreeNode
        Try
            For Each Node In tView_Serveur.SelectedNode
                tView_Temporaire.FileCopy("Z:\Dossier\Sous dossier\Sous sous dossier\".fichier récupéré, "%system root%\temp")

            Next
        Catch erreur As Exception
            MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
        End Try
    End Sub


Est-ce qu'il y aurait un moyen d'éviter le For Each aussi?
Merci d'avance.
mercredi 24 octobre 2012 à 12:04:00 | Re : Copie de fichiers .exe via des Treeviews

Le Pivert

Pour pouvoir t'aider il faut savoir le chemin que tu as quand tu cliques sur ton fichier.
Tout d'abord
Tu cliques sur ta treeview pour obtenir l'evenement: _AfterSelect
et tu mets une msgBox
Ce qui donne ceci:

Code Visual Basic :
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
        MsgBox(e.Node.FullPath)
End Sub

Tu cliques sur ton fichier.
En fonction de ce que tu vas obtenir tu mettras une variable à la place de la msgBox nommé par exemple cheminfichier.
Il faudra ensuite extraire de cette chaine le nom du fichier avec son extension pour pouvoir le copier avec un variable nommé fichier.
Il ne te restera plus qu'a faire ta copie
Avec la chemin de la source et le chemin de la destination
@+Le Pivert
mercredi 24 octobre 2012 à 14:52:41 | Re : Copie de fichiers .exe via des Treeviews

swohard

Merci pour ta réponse Le Pivert

Pour que tu es plus de précision, voilà le code aujourd'hui:

Code Visual Basic :
Imports System.IO
Imports System
Imports System.Net
Imports System.Windows
Imports System.Collections
Imports System.Object
Imports System.MarshalByRefObject
Imports System.Windows.Forms.TreeNode


Public Class Form_Principale

    Const Source As String = "Z:\tech\!  Softhèque\! PackSofts"
    Const Destination As String = "C:\WINDOWS\Temp"

    Private Sub Form_Principale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '--------------------------------------------------------------------------------------------------------
        '------------------------------ TRAITEMENT TREEVIEW POUR LE COTE SERVEUR --------------------------------
        '--------------------------------------------------------------------------------------------------------
        'Définit le premier noeud
        Me.tView_Serveur.TopNode = Me.tView_Serveur.Nodes.Add(Source, Source)

        'Arborescence du premier noeud
        For Each Dossier As String In Directory.GetDirectories(Source)
            Me.tView_Serveur.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursif
            ListeArborescenceDossier(Dossier, Me.tView_Serveur.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(Source)
            Me.tView_Serveur.TopNode.Nodes.Add(Path.GetFileName(Fichier))
        Next

        '--------------------------------------------------------------------------------------------------------
        '--------------------------- TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE ------------------------
        '--------------------------------------------------------------------------------------------------------
        'Définit le premier noeud
        Me.tView_Temporaire.TopNode = Me.tView_Temporaire.Nodes.Add(Destination, Destination)

        'Arborescence du premier noeud
        For Each Dossier As String In Directory.GetDirectories(Destination)
            Me.tView_Temporaire.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursif
            ListeArborescenceDossier(Dossier, Me.tView_Temporaire.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(Destination)
            Me.tView_Temporaire.TopNode.Nodes.Add(Path.GetFileName(Fichier))
        Next

        '--------------------------------------------------------------------------------------------------------
        '----------------------------------- TRAITEMENT FICHIERS .EXE ET .MSI -----------------------------------
        '--------------------------------------------------------------------------------------------------------
        ' /!\ Partie modifié /!\
        Try
            Dim node As TreeNode
            node.SelectAction = TreeNodeSelectAction.Select
            If File.Exists("Fichier .exe") Then
                tView_Serveur.SelectedNode.Text
                CopierFichier()
            End If
        Catch erreur As Exception
            MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
        End Try

    End Sub

    'Private Sub btn_ClickAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ClickAdd.Click
    'Dim Node As System.Windows.Forms.TreeNode
    ' Try
    '  If File.Exists("Fichier .exe") Then
    '     For Each Node In tView_Serveur.SelectedNode
    '        FileCopy(Node."Z:\tech\!  Softhèque\! PackSofts\", "%system root%\temp")
    '   Next
    '    End If
    ' Catch erreur As Exception
    '      MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
    '   End Try
    'End Sub

    Sub ListeArborescenceDossier(ByVal DossierActuel As String, ByVal NodeActuel As TreeNode)
        'Recupère le node dans lequel on est
        Dim Node As TreeNode = NodeActuel.Nodes(DossierActuel)
        'Répertoires de ce noeud
        For Each Dossier As String In Directory.GetDirectories(DossierActuel)
            Node.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursive
            ListeArborescenceDossier(Dossier, Node)
        Next
        'Fichiers de ce noeud
        For Each Fichier As String In Directory.GetFiles(DossierActuel)
            Node.Nodes.Add(Path.GetFileName(Fichier))
        Next
    End Sub

    Sub CopierFichier()
        Dim Node As System.Windows.Forms.TreeNode
    FileCopy(Node."Z:\tech\!  Softhèque\! PackSofts\", "%system root%\temp")

    End Sub

End Class


Il y a eu des modifications depuis:
- J'ai supprimé les 2 boutons add et remove, la tâche sera plus simple, y compris pour les futurs utilisateurs.
- J'ai supprimé par la même occasion le For Each, pour remplacer ça avec un traitement par SelectAction.

l'Algo, le voilà:

* Quand tu ouvres le programme, tu tombes directement sur l'interface avec mes 2 Treeviews:
- Le Treeview (tView_Serveur) qui pointera directement sur un dossier du serveur dans
lequel il y aura des
fichiers .exe et .msi.
- Et le Treeview (tView_Temporaire) qui pointera directement sur le dossier temporaire du
Pc (%system root%\temp), dans lequel je vais vouloir copier les fichiers .exe au choix.
* Et là, on oublis les boutons Add et Remove!
* Lorsque que clique sur un fichier, on vérifie qu'il existe bien (File.Exists) avant même qu'il déclenche un évènement.
- Si Oui: On déclenche un évènement.
- Sinon : Message d'Erreur.
* Si le fichier existe, alors on déclenche l'évènement (SelectAction je crois):
- On copie le fichier sélectionné du dossier serveur au dossier temporaire (FileCopy (Path source, Path destination).
* Puis une fois tous les fichiers copiés, je clique sur un bouton "Installé" pour une installe automatique des .exe (mais ça c'est une autre histoire).



Et pour chaque fichier cliqué, le traitement vérifiera qu'il existe puis si c'est bon, il le copie dans le temporaire de suite.


Seulement, il me met: Erreur 1 'SelectAction' n'est pas un membre de 'System.Windows.Forms.TreeNode'.
Code Visual Basic :
Try
            Dim node As TreeNode
            node.SelectAction = TreeNodeSelectAction.Select
            If File.Exists("Fichier .exe") Then
                tView_Serveur.SelectedNode.Text
                CopierFichier()
            End If
        Catch erreur As Exception
            MessageBox.Show("Copie échoué. " & erreur.GetBaseException.Message)
        End Try


Par quoi je dois remplacer

Dim node As TreeNode

alors?

mercredi 24 octobre 2012 à 16:02:26 | Re : Copie de fichiers .exe via des Treeviews

Le Pivert

Réponse acceptée !
Je t'ai mis la copie dans un bouton.
Attention à tes chemins source et destination. Evite les espaces et fait les terminé par \
Voici le code, j'ai laissé mes chemin pour mes essais pour que tu comprennes bien:

Code Visual Basic :
Imports System.IO
Imports System
Imports System.Net
Imports System.Windows
Imports System.Collections
Imports System.Object
Imports System.MarshalByRefObject
Imports System.Windows.Forms.TreeNode
Public Class Form1
    Const Source As String = "C:\Documents and Settings\Propriétaire\Mes documents\Mes images\Chambre\"

    Const Destination As String = "C:\Documents and Settings\Propriétaire\Mes documents\Mes images\Nouveau dossier\"

    Dim nomfichier As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '--------------------------------------------------------------------------------------------------------
        '------------------------------ TRAITEMENT TREEVIEW POUR LE COTE SERVEUR --------------------------------
        '--------------------------------------------------------------------------------------------------------
        'Définit le premier noeud
        Me.tView_Serveur.TopNode = Me.tView_Serveur.Nodes.Add(Source, Source)

        'Arborescence du premier noeud
        For Each Dossier As String In Directory.GetDirectories(Source)
            Me.tView_Serveur.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursif
            ListeArborescenceDossier(Dossier, Me.tView_Serveur.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(Source)
            Me.tView_Serveur.TopNode.Nodes.Add(Path.GetFileName(Fichier))
        Next

        '--------------------------------------------------------------------------------------------------------
        '--------------------------- TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE ------------------------
        '--------------------------------------------------------------------------------------------------------
        reset() 'on affiche la treeview destination


    End Sub
    Sub ListeArborescenceDossier(ByVal DossierActuel As String, ByVal NodeActuel As TreeNode)
        'Recupère le node dans lequel on est
        Dim Node As TreeNode = NodeActuel.Nodes(DossierActuel)
        'Répertoires de ce noeud
        For Each Dossier As String In Directory.GetDirectories(DossierActuel)
            Node.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursive
            ListeArborescenceDossier(Dossier, Node)
        Next
        'Fichiers de ce noeud
        For Each Fichier As String In Directory.GetFiles(DossierActuel)
            Node.Nodes.Add(Path.GetFileName(Fichier))
        Next
    End Sub
   Private Sub tView_Serveur_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tView_Serveur.AfterSelect
        nomfichier = tView_Serveur.SelectedNode.ToString
        nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:
    End Sub
    'on copie
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            If File.Exists(Destination & nomfichier) Then
                MessageBox.Show("Un fichier du même nom existe déjà!", "Copie fichier")
                Exit Sub
            Else
                FileCopy(Source & nomfichier, Destination & nomfichier)
                MessageBox.Show("Copie éffectuée", "Copie fichier")
                reset()'on réinitialise la treeview 
            End If
        Catch erreur As Exception
            MessageBox.Show("Copie échouée. " & erreur.GetBaseException.Message)
        End Try
    End Sub
    ' TRAITEMENT TREEVIEW POUR LE COTE DOSSIER TEMPORAIRE
    Private Sub reset() 'on réinitialise la treeview à chaque copie
        Me.tView_Temporaire.Nodes.Clear()
        'Définit le premier noeud
        Me.tView_Temporaire.TopNode = Me.tView_Temporaire.Nodes.Add(Destination, Destination)

        'Arborescence du premier noeud
        For Each Dossier As String In Directory.GetDirectories(Destination)
            Me.tView_Temporaire.TopNode.Nodes.Add(Dossier, Path.GetFileName(Dossier))
            'Récursif
            ListeArborescenceDossier(Dossier, Me.tView_Temporaire.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(Destination)
            Me.tView_Temporaire.TopNode.Nodes.Add(Path.GetFileName(Fichier))
        Next
    End Sub
End Class


Tu noteras que j'ai fait un Sub pour la treeview destnation pour qu'elle se réinitialise à chaque opération


@+Le Pivert
mercredi 24 octobre 2012 à 16:10:19 | Re : Copie de fichiers .exe via des Treeviews

Le Pivert

Réponse acceptée !
Si tu veux faire la copie en cliquant sur le fichier tu mets cela:

Code Visual Basic :
  Private Sub tView_Serveur_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tView_Serveur.AfterSelect
        nomfichier = tView_Serveur.SelectedNode.ToString
        nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:
        Try
            If File.Exists(Destination & nomfichier) Then
                MessageBox.Show("Un fichier du même nom existe déjà!", "Copie fichier")
                Exit Sub
            Else
                FileCopy(Source & nomfichier, Destination & nomfichier)
                MessageBox.Show("Copie éffectuée", "Copie fichier")
                reset()
            End If
        Catch erreur As Exception
            MessageBox.Show("Copie échouée. " & erreur.GetBaseException.Message)
        End Try
    End Sub



Le Pivert
mercredi 24 octobre 2012 à 17:00:29 | Re : Copie de fichiers .exe via des Treeviews

swohard

Et bah merci beaucoup Le Pivert!

Mais attends, si j'ai bien compris,
Code Visual Basic :
nomfichier = nomfichier.Replace("TreeNode: ", "")

On utilise

nomfichier.Replace

parce qu'on a pas le droit d'attribuer le même nom à la source et à la destination? C'est bien ça?



Et après, je comprend pas vraiment le reste

("TreeNode: ", "") 'supprime TreeNode:

dans
Code Visual Basic :
nomfichier = nomfichier.Replace("TreeNode: ", "") 'supprime TreeNode:

... C'est là qu'on remplace les caractères non? Ca équivaux à ça non:

MonString = MonString.Replace("test", "test2")



Cela n'empêche que je comprend mal comment fonctionne SelectAction, ainsi que TreeNodeSelectAction.Select et toute la clique ...

Excuses moi pour ces questions, mais j'essaye de bien comprendre. Ca fait une semaine que je suis sur ce problème qui est censé être facile (censé), donc j'essaye d'éviter de faire les mêmes erreurs.
mercredi 24 octobre 2012 à 17:02:07 | Re : Copie de fichiers .exe via des Treeviews

swohard

Je vais voir ça, et je te dis si c'est bon.
mercredi 24 octobre 2012 à 17:42:52 | Re : Copie de fichiers .exe via des Treeviews

ucfoutu

Membre Club
Bonjour,
Etes-vous certain de ce que n'existe pas, comme sous VB6, la propriété FullPath de l'objet selectedItem ? ===>> et que par exemple ===>>>
TreeView1.SelectedItem.FullPath ne retournerait pas tout seul comme un grand une chaine de caractères représentant le chemin complet de l'élément sélectionné dans la TreeView ?
Bien sur (si marche, comme je veux le croire) : pas le selectedItem mais pour chaque machin dans les items sélectionnés : machin.Fullpath est un chemin complet de l'item machin.
Et dès lors que l'on a ce chemin, le reste devrait être simple (selecteditem retournant quant à lui, le nom seul du fichier ou dossier) : contrôler si fichier ou dossier et agir en conséquence.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
mercredi 24 octobre 2012 à 18:01:18 | Re : Copie de fichiers .exe via des Treeviews

Le Pivert

C'est tout à fait exact UCFOUTU il y a un code pour récupérer le chemin complet:

tView_Serveur.SelectedNode.FullPath

Mais vu que les chemin sont en durs j'ai pensé qu'il valait mieux extraire le nom du fichier pour le chemin de destination.

Pour showhard quand tu mets ceci dans l'evenement AfterSelect
MsgBox(tView_Serveur.SelectedNode.ToString)
Tu obtiens : TreeNode: nom du fichier.
Donc pour avoir le nom seul du fichier tu utilises Replace pour éliminer TreeNode:
Car pour le chemin de destination il te faut le nom du fichier.
Pour ce qui est de cela
"Cela n'empêche que je comprend mal comment fonctionne SelectAction, ainsi que TreeNodeSelectAction.Select et toute la clique ..."

Je ne sais pas. Mais en le mettant dans l'evenement Form1_Load cela ne risque pas de fonctionner

Il faut que tu saches que Form1_Load est l'evenement qui se produit à l'ouverture de l'application et AfterSelect comme son nom l'indique cela se produit après avoie sélectionné un noeud

Comme je te l'ai fait cela fonctionne correctement

@+Le Pivert
jeudi 25 octobre 2012 à 11:10:24 | Re : Copie de fichiers .exe via des Treeviews

swohard

MsgBox(tView_Serveur.SelectedNode.ToString)
Tu obtiens : TreeNode: nom du fichier.
Donc pour avoir le nom seul du fichier tu utilises Replace pour éliminer TreeNode:
Car pour le chemin de destination il te faut le nom du fichier.


D'accord! Merci pour la précision Le Pivert Et merci beaucoup pour toutes ces réponses apportés et d'y avoir consacré du temps dessus!

Comme je te l'ai fait cela fonctionne correctement

J'en ai aucun doute et d'ailleurs tout fonctionne. J'espère qu'un jour ça sera moi qui serait en mesure d'aider les autres!

D'après ce que tu me dis, il faudrait en faite mettre SelectAction en méthode alors, et l'appeler ensuite (en dehors du Form_Load bien entendu). Je vais étudier cette piste là pour une prochaine fois!

Maintenant, je dois voir comment appeler l'interface de connexion au NAS avant de lancer ces instructions... Je vais me marrer!

Merci à vous pour vos interventions et passez une bonne journée.

1 2 3 4

Cette discussion est classée dans : fichier, exe, dossier, system, copie


Répondre à ce message

Sujets en rapport avec ce message

Copie de dossier [ par jimy neutron ] Bonsoir,Quelqu'un connaitrait-il comment copier un dossier (folder) d'un disk à un autre, sans se soucier du contenu. (donc, pas de copie de fichier p Ouverture unique dossier et copie [ par lemonwarez ] Bonjour,Je suis en train de faire un programme Console mais, malheureusement, j'ai un gros problème.Le programme doit ouvrir et copier un fichier d'un Erreur sur copie de fichier. "system.UnauthorizedAccessException" [ par docserta06 ] Bonsoir, J'ai systématiquement le message d'erreur suivant lorsque je copie un fichier en ecrasant un fichier existant. "system.UnauthorizedAccessE Copie de fichiers [ par Mercure ] Salut!J'aimerais savoir comment copier un fichier des ficheirs dans un autre repertoire dependant de da la date de creation et de modification de ceux test + copie de fichier marche pas !argh [ par Enderk ] Dans mon prog, je test la presence d'un fichier, si il est present le prog se stop mais si il est absent je copie la sauvegarde dans le rep. Il faut s Programme [ par milo2009 ] milo2009Salut,j'ai fait un programme, que j'ai mis dans un dossier appelé "com", j'ai mis aussi un fichier txt, jpg, com, exe.et un executable avec vb Copie System [ par Farquaad ] Bonjours, j'aimerai savoir s'il est possible de recuperer les informations de nom de fichier,taille copier,etat d'avancement quand windows fait une co Prob... mon prog detecter par norton ???? [ par castor62 ] BonjourJ'ai utilisé une fonction suivante dans mon prog :Dim fsSet fs = CreateObject("Scripting.FileSystemObject")'Copie fichier.exe vèrs le_fichier.e un exe qui se copie automatiquement dans un dossier défini !!! [ par mric51188 ] voila je suis débutant et je cherche la source pour que mon programme se copie automatiquement vers un dossier defini (pour mon ca ces le dossier de d *** COPIE D'UN FICHIER *** [ par Heny ] Salut a tous'================================================'****Enregistrement d'un fichier de sauvgarde****'Créer le dossierSet fs = CreateObject("


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales