IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Deplacer Dossier D'un pc a un serveur via c# [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Deplacer Dossier D'un pc a un serveur via c#
    Merci de lire mon Dernier message en bas du thread, Changement complet de sujet.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    La balise [ CODE][ /CODE] existe

    Le programme ne plante pas mais reste bloquer car il n'y a qu'un seul Thread et que tu lui demandes de se figer (Sleep d'un seconde)

    Il faut jouer avec soit un timer, soit creer un autre thread
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Salut,

    Ton programme ne plante pas à proprement parlé.
    C'est surtout que tu lances une boucle infinie sur le thread principal de ton application et qu'une fois lancé tu ne peux plus interagir sur l'interface.

    A mon sens le mieux serait d'utiliser la classe background worker.

    Tu trouveras un tutoriel sur l'utilisation de cette classe ici:
    http://webman.developpez.com/article...ckroundworker/

    Tu disposes également d'un exemple concret ici

    Bonne chance.
    MvK
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Essaye un truc comme ça mais j'ai pas testé.
    Et c'est la première fois que j'essaye d'aider kkun alors te fie pas trop a moi ;D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public int i;
    public BackgroundWorker bgwboucle;
     
            public void bgwboucle_Dowork(object sender, DoWorkEventArgs e)
            { 
              int o = 0;
     
                do{
     
                    o++;
                    UIUpdaterDelegate delegate1 = delegate {
                    nbcycle.Text = Convert.ToString(o);
                    };
                    nbcycle.Invoke(delegate1); // Label affiche nombre de  cycle effectué
                    Thread.Sleep(1000); // Pause: 1Sec
                } while (this.i == 1);
            }
     
            private void launch_Click(object sender, EventArgs e)
            {
                this.i = 1;
                if(!this.bgwboucle.IsBusy)
                {
                     this.bgwboucle.RunWorkerAsync();
                }
            }
     
            private void stop_Click(object sender, EventArgs e)
            {
                this.i = 0;            
            }
     
    this.bgwboucle.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgwboucle_DoWork);
    Citation Envoyé par harghan Voir le message
    Bonjour, je suis actuellement en stage Informatique en industrie et je doit effectuer une Moulinette avec pause.


    JE suis sous Visual studio 2005.


    Donc je prend tout depuis le debut.

    J'ai creer un projet application c# (avec interface graphique)

    J'ai fait une interface graphique bouton Demarrer / arreter et un label qui affiche le nombre de cycle effectué.



    Edit: j'en suis arriver a ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public void boucle (int i)
            { 
              int o = 0;
     
                do{
     
                    o = o + 1;
                    nbcycle.Text = Convert.ToString(o); // Label affiche nombre de  cycle effectué
                    System.Threading.Thread.Sleep(1000); // Pause: 1Sec
                } while (i == 1);
     
     
            }
     
            private void launch_Click(object sender, EventArgs e)
            {
                boucle(1);
     
     
     
            }
     
            private void stop_Click(object sender, EventArgs e)
            {
     
                boucle(0);
     
            }
    Le programme plante lorsque j'appuie sur le bouton lancer
    help

  5. #5
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Et le while ?
    la variable i ne varie jamais... donc boucle infinie... pas la peine de sortir l'artillerie lourde avec le BackgroundWroker ! (En tous cas, pas de suite).
    Suggestion :
    au lieu de
    À priori, effectivement l'utilisation d'un timer serait largement plus approprié !
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 87
    Points : 179
    Points
    179
    Par défaut
    Et le while ?
    la variable i ne varie jamais... donc boucle infinie... pas la peine de sortir l'artillerie lourde avec le BackgroundWroker !
    Je penses que la boucle infini c'est le but recherché.
    D'où l'utilisation d'un autre thread via BgW,ce qui me semble le plus propre. Après je peux me planter.

    Si on reste dans le main thread impossible de mettre à jour le label avec le nombre d’occurrences de cycle, sauf si on utilise l'Application.doEvents() ce qui serait, à mon sens, fort peu subtil.

    MvK
    Les questions ne sont pas obligées d'avoir du sens. Mais les réponses, si.
    Terry Pratchett (Procrastination)

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par neilbgr Voir le message
    Et le while ?
    la variable i ne varie jamais... donc boucle infinie... pas la peine de sortir l'artillerie lourde avec le BackgroundWroker ! (En tous cas, pas de suite).
    Ben il a 2 boutons il dit. Un qui lance la boucle l'autre qui l'arrête
    Le premier bouton fixe this.i a 1 et lance le backgroundworker qui tourne temps qu'on click pas sur le bouton stop qui passe this.i à 0
    C'est sur on doit pouvoir faire mieux mais dans le principe ça devrais marcher non ?

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 63
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par MvK0610 Voir le message
    Si on reste dans le main thread impossible de mettre à jour le label avec le nombre d’occurrences de cycle, sauf si on utilise l'Application.doEvents() ce qui serait, à mon sens, fort peu subtil.

    MvK
    d'ou le UIUpdaterDelegate non ? enfin moi sur mon programme j'utilise ça de partout ça met a jour les label en temps réel même si je suis sur une autre Tab

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Un truc simple pour commencer et pour comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    private bool bContinue;
     
    public void boucle ()
            { 
              int o = 0;
     
                do{
     
                    o = o + 1;
                    nbcycle.Text = Convert.ToString(o); // Label affiche nombre de  cycle effectué
                    System.Threading.Thread.Sleep(1000); // Pause: 1Sec
                } while (bContinue);
     
     
            }
     
            private void launch_Click(object sender, EventArgs e)
            {
                bContinue = true;
                boucle();
            }
     
            private void stop_Click(object sender, EventArgs e)
            {
     
                bContinue = false;
     
            }
    PS : préférer les méthodes proposées précédemment.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Bon ben, L'interface n'etant pas obligatoire (vu que c'est un petit logiciel qui tourne sans l'aide de personne)

    je suis passer a une appli console.

    J'ai donc reussi ma boucle avec le timer etc

    Maintenant le probleme qui se presente c'est que j'ai eu l'idée d'utiliser Directory.Move pour Deplacer les Dossier

    Sauf qu'avec cette commande, on ne peux transferer des dossiers d'un endroit a un autre du MEME disque dur.



    Code: [Sélectionner]

    Variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string Dossier1 = @"Z:\Soft_**\***_***\Desktop";
    string Dest1 = @"C:\serv\";
    dans le main:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Directory.Move(Dossier1,Dest1);
    Erreur affiché:

    Le chemin d'accès source et celui de destination doivent avoir des racines identiques. Le déplacement n'est pas possible entre ces volumes.




    Je me retrouve bloqué sur 'Comment deplacer les dossiers D'un PC a un serveur (via reseau). (Z = serveur // C = Local).

    P.s (les etoiles sur les chemins, c'est juste de la censure.)



    Une solution

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Doublon, Message a supprimer

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Directory.Copy(source,destination)
    Directory.Delete(source)

    Pourquoi faire simple quand on peut faire compliquer


    dans un try catch ca peut etre utile
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Directory.Copy(source,destination)
    Directory.Delete(source)

    Pourquoi faire simple quand on peut faire compliquer


    dans un try catch ca peut etre utile


    Directory.Copy N'existe pas
    ou du moins mon Visual Studio ne me le propose pas.


    Edit: en regardant sur le net, il y aurait une alternative a Directory.Copy

    Ce serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private void XCopy(string dir1, string dir2)
            {
     
     
                string[] files = Directory.GetFiles(dir1);
     
                foreach (string f in files)
                {
                    File.Copy(f, dir2 + f.Substring(dir1.Length), true);
                }
     
     
                string[] dirs = Directory.GetDirectories(dir1);
                foreach (string d in dirs)
                {
                    XCopy(d, dir2 + d.Substring(dir1.Length));
                }

    Sauf que quand je met cette fonction Dans ma class

    Mon main ne reconnait pas Xcopy, je n'arrive pas a utiliser la fonction, pourquoi ?

  14. #14
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    incompréhensible ton Thread!!
    Nouveau sujet = Nouveau thread
    Problème d'accès, tu appels surement ta méthode depuis une méthode static.
    Essai avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static void XCopy(...)

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    incompréhensible ton Thread!!
    Nouveau sujet = Nouveau thread
    Problème d'accès, tu appels surement ta méthode depuis une méthode static.
    Essai avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static void XCopy(...)


    Je prend note pour mes prochains threads.

    Merci beaucoup pour le static !!!



    Voila nouveau message d'erreur.

    Impossible de trouver une partie du chemin d'accès


    Voici le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     public static void copidos(string dir1, string dir2)
            {
     
     
     
                string[] files = Directory.GetFiles(dir1);
                foreach (string f in files)
                {
                    File.Copy(f, dir2 + f.Substring(dir1.Length), true);
                }
     
                string[] dirs = Directory.GetDirectories(dir1);
     
                foreach (string d in dirs)
                {
                    copidos(d, dir2 + d.Substring(dir1.Length));
                }
     
     
            }
    Variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
      string Dossier1 = @"Z:\Soft_***\****_***\Desktop";
                string Dossier2 = @"Z:\Soft_*****_***\Documents";
                string Dossier3 = 
    @"Z:\Soft_***\****_***\***_***_****_DISTRIBUTION";
     
     
     string Dest1 = @"C:\serv\";
    et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
                        copidos(Dossier1,Dest1);
                        copidos(Dossier2, Dest1);
                        copidos(Dossier3, Dest1);

    l'endroit surligner est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    string[] files = Directory.GetFiles(dir1);
     
     
    de la fonction


    Une explication ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Cela arrive quelque fois lors de l'accès aux lecteurs réseaux, si je ne me trompe pas c'est ton cas.
    La seule solution est de recréer le lecteur réseau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(!Directory.Exists(@"Z:\")){
                    Process delete = Process.Start("net.exe", @"use Z: /DELETE /YES");
                    delete.WaitForExit();
     
                    Process create = Process.Start("net.exe", @"use Z: \\SERVEUR\Path password /USER:username /PERSISTENT:YES");
                    create.WaitForExit();
    }
    Cela devrait corriger ton problème d'accès réseau

  17. #17
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Citation Envoyé par harghan Voir le message
    Merci de lire mon Dernier message en bas du thread, Changement complet de sujet.
    Changement complet, ça veut dire nouveau thread.

    Ce thread aurait dû être signalé :

    Il faut remettre le message d'origine, sinon ce thread sera incompréhensible.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Cela arrive quelque fois lors de l'accès aux lecteurs réseaux, si je ne me trompe pas c'est ton cas.
    La seule solution est de recréer le lecteur réseau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(!Directory.Exists(@"Z:\")){
                    Process delete = Process.Start("net.exe", @"use Z: /DELETE /YES");
                    delete.WaitForExit();
     
                    Process create = Process.Start("net.exe", @"use Z: \\SERVEUR\Path password /USER:username /PERSISTENT:YES");
                    create.WaitForExit();
    }
    Cela devrait corriger ton problème d'accès réseau


    Malheuresement cela ne viens pas de la, et je viens de remarquer un truc,


    Le dossier 1 & 2 est effectivement bien copié, mais le dossier 3 non.


    Le dossier 1 contient un .exe, le dossier 2 contient un .txt, et le dossier 3 contient un autre dossier

    du coup le programme se stop a ce moment j'ai remarqué que cela bloque sur la ligne ou il y a le GETFILES.


    Je pense que je doit faire une condition 'si c'est un dossier, ignorer cette etape' car en dessous il y un a GETDIRECTORY


    une idée de comment je peux faire ca?




    Edit: j'ai retiré mon Dossier 3 du transfert, et ce depuis tout va bien, allez savoir pourquoi.


    RESOLU

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dossier data de Mysql dans un serveur distant
    Par maxeur dans le forum MySQL
    Réponses: 3
    Dernier message: 21/07/2009, 19h14
  2. Réponses: 0
    Dernier message: 02/07/2009, 21h23
  3. Réponses: 5
    Dernier message: 30/07/2008, 08h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo