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

Windows Forms Discussion :

copie de répertoire avec barre de progression


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut copie de répertoire avec barre de progression
    bonjour,

    je débute en c# et la je bloque sur un truc. J'ai cherché sur le forum mais je n'ai rien trouvé qui pourrais m'indiquer comment faire

    pour schématiser vite fait j'ai un code découpé en :
    - un windows form principal
    - un windows form secondaire
    - une librairie

    j'aimerais copier un répertoire (contenant des fichiers de toute taille quelques ko a quelque go) et avoir une barre de progression indiquant l'avancement total de la copie

    dans mon windows form principal j'indique le répertoire a copier et le répertoire de destination. Je fais appelle à la librairie pour la copie

    j'aimerais avoir ma barre de progression dans le windows form secondaire, ainsi que l'affichage du nom du fichier en cours de copie

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Pas très explicite pas sûr d'avoir compris mais je me lance.

    Moi ce que je ferais c'est un événement dans ta libraire auquel la forme secondaire serait abonnée.

    Voir deux :
    Un pour lui dire 'C'est parti on copie, tiens voilà le nom du dossier'.
    Et un deuxième pour lui dire 'on en est à tant de %'

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si c'est pas toi qu'a codé la librairie ca va etre dur

    j'espère que tu utilises un thread ou un backgroundworker pour la copie des fichier

    sinon le principe c'est que le thread ou le backgroundworker une fois qu'il connait le dossier source regarde la taille de chaque fichier, il peut ensuite calculer le nombre total d'octets à transférer
    ensuite lors de la copie des fichiers (dans une boucle en général) tu prévient l'interface que tu copies tel fichier et que le pourcentage en est à tant
    le pourcentage est calculé par rapport au nombre d'octet total et le nombre d'octets déjà transférés

    pour prévenir l'interface, il faut soit un délégué si tu utilises un thread, soit le faire dans l'evement progresschanged du backgroundworker
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    c'est moi qui ai codé ma librairie mais peut être pas comme il fallait pour pouvoir l'utiliser avec la progress bar

    la méthode qui consiste a cherche la taille total et afficher le % déjà copier j'y ai pensé

    mais vu que je n'ai rien compris a vos réponses j'ai plus qu'à me retaper une semaine de tuto >.< ca commence a me #}!@#¤ tout ca

    est ce que vous auriez juste de noms pour me guider ? je chercherais des tutos en fonction

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    il existe une fonction de l'api Win32 qui lance une copie de répertoire et affiche la progression classique avec l'animation que l'explorer lance quand tu fais une copie. Cela ne pourrait-il pas te suffire ?

    Si c'est le cas, il suffit de chercher "api Win32, copy progress" sur google ou bien yahoo, voir aller directement sur pInvoke.Net et chercher copy, progress et tu devrais rapidement trouver l'api qui convient

    (idée : CopyFileEx sur pinvoke.net)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    a vrai dire la copie des fichier n'est que la première des 4 étapes que je fais sur ces fichiers, il y en a d'autres après donc la progress bar de windows ne suffira pas

    mais merci pour l'aide ^^


    voici le bout de ma librairie qui copie mon répertoire et qui calcule sa taille
    le soucis c'est que j'ai plein de petits fichier et un tres gros

    avec cette méthode j'ai l'avancement apres la copie d'un fichier et non pendant, donc ca va faire bizarre avec mon gros fichier. mais bon je me contenterais de cela en attendant de me perfectionner en C#

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
        public class repertoire
        {
            public static long taille_rep(string rep_source)
            {
                DirectoryInfo rep = new DirectoryInfo(rep_source);
                long taille = 0;
                //Ajoute taille des fichiers
                FileInfo[] fichiers = rep.GetFiles();
                foreach (FileInfo fichier in fichiers)
                {
                    taille += fichier.Length;
                }
                //Ajoute taille des sous-repertoires
                DirectoryInfo[] reps = rep.GetDirectories();
                foreach (DirectoryInfo r in reps)
                {
                    taille += taille_rep(r.ToString());
                }
                return taille;
            }
            public static void Copie_rep(string rep_source, string rep_dest)
            {
                long taille_tot = taille_rep(rep_source);
                long taille_copie = 0;
                long pourcentage_copie = 0; 
                int avancement_copie;
                DirectoryInfo rep = new DirectoryInfo(rep_source);
                if (rep.Exists)
                {
                    string vrai_rep_dest;
                    if (rep.Root.Name != rep.Name)
                    {
                        vrai_rep_dest = Path.Combine(rep_dest, rep.Name);
                        if (!Directory.Exists(vrai_rep_dest))
                        { Directory.CreateDirectory(vrai_rep_dest); }
                    }
                    else
                    { vrai_rep_dest = rep_dest; }
                    foreach (string d in Directory.GetDirectories(rep_source))
                        Copie_rep(d, vrai_rep_dest);
                    foreach (string fichier in Directory.GetFiles(rep_source))
                    {
                        string fichier_dest = Path.Combine(vrai_rep_dest, Path.GetFileName(fichier));
                        taille_copie += fichier.Length;
                        File.Copy(fichier, fichier_dest, true);
                        pourcentage_copie = taille_copie * 100 / taille_tot;
                        avancement_copie = (int)pourcentage_copie;
                    }
     
                }
            }
    }

    je cherche comment comment passer le nom du fichier et le pourcentage copié dans mon form 2

Discussions similaires

  1. [MS-DOS]Copie de répertoire avec filtre
    Par tripper.dim dans le forum Windows
    Réponses: 5
    Dernier message: 07/10/2014, 23h23
  2. [Débutant] Copie de répertoire avec progression
    Par nimbus629 dans le forum VB.NET
    Réponses: 6
    Dernier message: 04/07/2011, 06h14
  3. Javascript copy de repertoire avec barre de progression
    Par avalokitech dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/01/2011, 16h56
  4. Copie de fichier avec barre de progression
    Par Papy214 dans le forum C#
    Réponses: 6
    Dernier message: 06/11/2008, 10h17
  5. Réponses: 2
    Dernier message: 27/04/2007, 11h12

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