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 :

Pourcentage copy d'un fichier de 20GB [VB.Net]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut Pourcentage copy d'un fichier de 20GB [VB.Net]
    Bonjour à tous,

    Déjà , je ne sais pas si je poste au bon endroit

    Ensuite mon probleme est dans le titre: j'aimerais avoir le pourcentage de la copy sur mon fichier de 20GB.

    Quand je lance la copie via mon programme, la destination fait la même taille que la source même si la copie met 15 min à se terminer, je ne peux donc pas faire "taille source" - "taille dest" pour ma progressbar

    j'utilise la methode suivante pour la copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.File.Copy(source, Dest)
    J'ai pu voir qu'il existait plusieurs méthodes pour copier par "byte" mais je comprend pas très bien comment elle fonctionne (je débute).

    Faut-il que je m'oriente vers la copie par "byte" ou d'autre méthodes sont plus appropriées ?

    Merci de vos réponse

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut
    Bon, j'ai réussi à avancer petit à petit

    J'arrive à copier mon fichier avec la barre de progression grace à readByte() et writeByte mais cela me prend un temps un fou !!!

    Possibilité de copier paquet de byte, par exemple paquet de 1000 byte ? JE gagnerais du temps de copie ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pISQUIK Voir le message
    J'arrive à copier mon fichier avec la barre de progression grace à readByte() et writeByte mais cela me prend un temps un fou !!!
    Tu m'étonnes

    Il y a une API Windows qui permet de copier des fichiers en ayant un retour sur la progression de la copie : CopyFileEx

    C'est un peu galère à utiliser directement, mais la lib Dvp.NET contient un wrapper .NET que tu peux utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Import Developpez.Dotnet.System
     
    ...
     
        Dim copy As New FileCopyOperation(sourcePath, destinationPath)
        AddHandler copy.ProgressChanged, AddressOf(OnCopyProgress)
        copy.Execute()
     
    ...
     
    Sub OnCopyProgress(ByVal sender As Object, ByVal e As FileOperationProgressEventArgs)
        progressBar.Value = e.PercentDone
    End Sub

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Autre alternative : passer par le shell qui affiche les panneaux de progression standard de Windows.
    voir http://dotnet-snippets.com/dns/filec...ue-SID588.aspx

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut
    Merci de vos réponses,

    J'ai réussis à m'en sortir mais je ne sais pas si c'est vraiment très académique comme code

    Pour ceux que ca intéresse voila ma fonction :

    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
     
     Sub copyFile2()
     
            Dim _fileStreamOrignal = New FileStream(input, FileMode.Open, FileAccess.Read)
            Dim _fileStreamDestination = New FileStream(output, FileMode.Create, FileAccess.Write)
            Dim brReader = New BinaryReader(_fileStreamOrignal)
            Dim brWriter = New BinaryWriter(_fileStreamDestination)
            Dim octets = _fileStreamOrignal.Length
            Dim count As Integer = 10000000
            Dim buffer(count) As Byte
            Dim bytesRead As Integer
            Dim boucle As Integer = 0
     
            Try
                While octets > 0
                    bytesRead = brReader.Read(buffer, 0, count)
                    If bytesRead = 0 Then
                        Exit While
                    End If
     
                    brWriter.Write(buffer, 0, bytesRead)
                    octets = octets - bytesRead
                    boucle = boucle + 1
                    BackgroundWorker1.ReportProgress(boucle)
     
                End While
            Catch ex As Exception
                MsgBox("error")
            End Try
     
            MsgBox(boucle)
     
            brReader.Close()
            brWriter.Close()
            _fileStreamDestination.Close()
            _fileStreamOrignal.Close()
     
        End Sub
    Suivant le "count" utilisé on utilise de plus ou moins gros "paquets" de bytes.

    Voila, si quelqu'un à des remarques ou autres n'hesitez pas

    A+

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pISQUIK Voir le message
    Merci de vos réponses
    Pourtant elles ne t'ont visiblement pas beaucoup inspiré

    Pourquoi réinventer la roue alors qu'il existe des trucs faits exprès ?

    Citation Envoyé par pISQUIK Voir le message
    J'ai réussis à m'en sortir mais je ne sais pas si c'est vraiment très académique comme code
    Bah c'est une technique classique en fait... mais en général on utilise pas un buffer aussi gros, les tailles les plus fréquemment utilisées sont 4096 ou 8192.

Discussions similaires

  1. [VB6] Impact de la copie d'un fichier
    Par Cereal123 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 31/03/2006, 07h57
  2. Réponses: 12
    Dernier message: 07/12/2005, 18h42
  3. copie de base, fichier mdw, perte des droits
    Par hades666evil dans le forum Access
    Réponses: 2
    Dernier message: 14/09/2005, 17h06
  4. Copie d'un fichier sans montage avec Samba
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 5
    Dernier message: 14/07/2005, 11h31
  5. copie d'un fichier vers un autre serveur
    Par jexl dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 16h04

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