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

VB.NET Discussion :

progressbar et copie de fichier


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut progressbar et copie de fichier
    boujour tous.
    j'aimerai savoir comment incrémanter une progressbar en fonction du traitement et pour cela je veux imiter le programme windows qui copie les fichier mais je ne sais pas comment manipuler la progressbar en fonction du pourcentage de la copie.
    si quelqu'un à des idées ce sera gentil de les partager avec moi.

  2. #2
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    bonjour.
    pour plusieurs fichier c'est bon mais que faire pour un seul fichier?
    la progressbar restera vide, et elle ne sera remplite qu'à la fin ce qui ne sera pas visible et n'on plus artistique.
    j'ai besoin de savoir le pourcentage de la copie à chaque moment pour l'affecter a la progressbar si c'est fesable?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Bonjour

    La technique serai de ne pas compter le nombre de fichier mais le poid total du ou des fichiers!

    Nasty

  5. #5
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Exactement Nasty, mais petite question, combien de temps dure la copie de ce "dit" fichier ?

    Parce que si la copie est courte c'est pas la peine de te prendre la tête avec une progressbar juste pour faire joli.

    La progressbar est surtout faite pour donner une information de progression lorsque l'on a des temps d'attente significatifs.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    d'apres nasty la methode consiste à calculer le temps de la copie a partir de la taille du fichier et du debit de transfère de donnée mais le probleme c'est que le debit varie donc le temps calculé ne sra pas toujour précis.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Bonjour

    Tu bases ton calcul non pas sur le temps mais sur le poids.

    ton ratio c'est poid_telechargé/poid_total.

    Après en fonction de ton débit et du poids restant a transféré tu peux déterminer le temps restant

    (et puis ca fait Windows de ne pas avoir une durée très précise lors de transfert ^^)

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    dacord, mais commant pourai-je determiner le poids restant durant la copie

  9. #9
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Il me semble que cette fonction permet de récuperer les infos d'un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Computer.FileSystem.GetFileInfo(tonfichiersource)
    Tu regardes ici pour récuperer l'info que tu cherches c'est à dire la taille.

    Ensuite tu met un timer avec un interval de temps dans lequel tu vas récupérer toutes les "x" secondes la taille du fichier copier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Computer.FileSystem.GetFileInfo(tonfichiercopié)
    Tu fais ensuite ton ratio que tu couples à ta progressbar.

    Et tu n'oublie pas d'importer la bibliothèque :


  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    salut
    j'ai esseyé un timer mais le programme est bloqué durant la copie.
    alors j'ai esseyé un thread mais le problème c'est que les fonctions que j'utilise pour avoir la taille des fichiers retournent la taille totale du fichier et non pas la taille réelle durant la copie.
    j'ai utilisé :
    filelen()
    system.io.fileinfos

    c'est la mème chose.

  11. #11
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Je ne vois pas le soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Poids as Decimal
     
    Poids = My.Computer.FileSystem.GetFileInfo(Tonfichierencoursdecopie).Length
    Bien évidement tu met un timer et tu définis un interval, et à chaque intervalle tu réexécutes ton code, qui détermine la taille du fichier, et ainsi fait "progresser" ta progressbar.

    Il faut chercher un peu, on ne va pas te faire tout le travail. C'est en cherchant que l'on apprend et que l'on retient !

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    salut
    les recherches j'en ai fais des dixènnes mais je ne trouve pas encore.
    j'ai mème esseyé de copier avec 1 treamwriter et 1 streamreader je lis depuis le premier et j'écris dans le deuxième en progressant la bar mais c'est trop lent et souvant le fichier copié est endommagé.
    pour ce que tu viens d'ecrir je l'ai esseyé mais durant la copie le programme est bloqhé et le timer ne s'execute pas.

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    il te faut un autre thread pour faire ce qu'il dit

    sachant qu'en plus y a de fortes chances que le fichier te dises qu'il fasse la taille totale du début à la fin

    je pense que ce que tu veux faire n'est pas faisable (à part avec les streams et donc en pas rapide ^^)
    ou alors faudrait chercher une api de copie avec un callback de progression ...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Points : 414
    Points
    414
    Par défaut
    Je vais peut être proposer une idée débile mais comme je ne me suis jamais vraiment intéressé au transfert de fichier avec une jolie progressbar je ne sais pas si c'est faisable.

    Est il possible de compter le nombre d'octet envoyé? Si oui, tu n'as qu'a fait un rapport pour avoir ton avancement par rapport au poids total de ton ou tes fichiers.

    Nasty

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    c'est exactement ce que j'esseye de faire mais les fonctions ne retournent que la taille globale et non pas la taile envoyée

  16. #16
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Citation Envoyé par tonnebrre Voir le message
    salut
    j'ai esseyé un timer mais le programme est bloqué durant la copie.
    Utilise un BackGroundWorker pour faire la copie. Cela évitera que le programme bloque. De plus le BGW revoie la progression du traitement.

  17. #17
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    bonjour ,

    pour compter le nbr d'octect techarge tu peut declare un variable global

    dans tu peut décarrer un variable global pour calculer les octets copies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                StreamReader reader = new StreamReader("");
                byte[] buffer=new byte[1000] ;
                reader.BaseStream.Read (buffer,0,buffer.Length );
                Nbreoctectcopie += buffer.Length;
    je pense que la fonction read returne le nbre des octects lit

    et tu peut ensuit mettre a jour votre prgress par avec cette valeur soit en utilisant un timer ou thread.

    ou utilise les evenements

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Utilise un BackGroundWorker pour faire la copie. Cela évitera que le programme bloque. De plus le BGW revoie la progression du traitement.


    le bgw ne renvoie pas du tout la progression, il n'est pas devin de ce que tu vas y faire

  19. #19
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    le bgw ne renvoie pas du tout la progression, il n'est pas devin de ce que tu vas y faire
    Ce que je voulais dire c'est que le BGW possède un évènement permettant de fournir UNE progression. Bien entendu, c'est à l'utilisateur de définir la progression.

  20. #20
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 93
    Points : 60
    Points
    60
    Par défaut
    salut
    voila un code que j'ai ecris il copie byte par byte et fait progresser la bar mais il est trop lent et bloque le prog si le fichier est volumineux > 1 MO
    j'ai mit ce code dans un boutton

    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
    Dim byt As Byte
            Dim TAILLE_COURANTE, TAILLE_GLOBALE As Long
            Dim fileNBR1, fileNBR2 As Integer
            Dim FilePath1, FilePath2 As String
     
            'ouverture des fichiers
            fileNBR1 = FreeFile()
            FilePath1 = txtsource.Text
            FileOpen(fileNBR1, FilePath1, OpenMode.Binary)
     
            fileNBR2 = FreeFile()
            FilePath2 = txtdestination.Text
            FileOpen(fileNBR2, FilePath2, OpenMode.Binary)
     
            TAILLE_GLOBALE = FileLen(txtsource.Text)
            TAILLE_COURANTE = 1
     
            Do
                FileGet(fileNBR1, byt, TAILLE_COURANTE)
                FilePut(fileNBR2, byt, TAILLE_COURANTE)
                TAILLE_COURANTE += 1
     
                'proresser la progressbar
                prbcopie.Value = CInt(TAILLE_COURANTE / TAILLE_GLOBALE * 100)
            Loop Until EOF(fileNBR1)
     
            FileClose(fileNBR1)
            FileClose(fileNBR2)
    s'il y a quelleque chose pour m'aider ne soyez pas timide
    et merci d'avance pour vos aides précieuses.

Discussions similaires

  1. Copie de fichiers avec progressbar
    Par serialmatrix dans le forum C++
    Réponses: 3
    Dernier message: 11/02/2006, 18h30
  2. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2004, 22h39
  3. [Kylix] Copie de fichier...
    Par paty.olivier dans le forum EDI
    Réponses: 1
    Dernier message: 23/06/2004, 12h55
  4. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23

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