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 :

faire evoluer progressbar pendant transfert fichier


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut faire evoluer progressbar pendant transfert fichier
    Bonjour
    Je me suis mis au vb.net depuis peu

    je suis actuellement en train de faire un programme totut simple qui coupe les fichier sélectionnés et les met dans un autre dossier

    J'ai mis une listbox , 2 boutons , des combobox...

    Tout marche nikel...
    Maintenant j'aimerais mettre une barre de progression qui evolue en fonction des fichiers en train de se deplacer...(comme quand on fait un copier ou couper sur windows quoi)

    en cherchant sur divers forums sur le net, je vois qu'eventuellement il serait possible d'utiliser un API
    ( MoveFileWithProgress)

    Bien qu'ayant lu quelques tutos concernant les API ect
    Je ne vois pas du tout comment pouvoir l'utiliser

    J4entrevois plutot un moyen pour que ..durant le deplacement du fichier, on puisse avoir le nombre de byte du fichier a chaque laps de temps..et par la suite faire un calcul pour faire evoluer la progressbar...


    Merci de votre aide

  2. #2
    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 : 43
    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
    En gros, tu as 2 options:

    - utiliser la méthode File.Move, en "pur" VB.NET : c'est simple, mais ça ne te donne pas la progression

    - utiliser cette API MoveFileWithProgress : c'est plus complet, mais nettement plus difficile à utiliser...

    C'est une fonction native de Windows, donc pour l'utiliser en VB.NET il faut la déclarer dans ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DllImport("kernel32.dll", SetLastError:=True, EntryPoint:="MoveFileWithProgressW", CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
    Private Shared Function MoveFileWithProgress  ( _
        ByVal lpExistingFileName As String, _
        ByVal lpNewFileName As String, _
        ByVal lpProgressRoutine As CopyProgressRoutine, _
        ByVal lpData As IntPtr, _
        ByVal dwFlags As MoveFileFlags) As Boolean
    End Function
    Il faut aussi déclarer le delegate CopyProgressRoutine et les enums utilisés :

    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
    Private Delegate Function CopyProgressRoutine( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
    Private Enum CopyProgressResult As UInt32
        PROGRESS_CONTINUE = 0
        PROGRESS_CANCEL = 1
        PROGRESS_STOP = 2
        PROGRESS_QUIET = 3
    End Enum
     
    Private Enum CopyProgressCallbackReason As UInt32
        CALLBACK_CHUNK_FINISHED = 0
        CALLBACK_STREAM_SWITCH = 1
    End Enum
     
    <Flags>
    Private Enum MoveFileFlags As UInt32
        MOVE_FILE_REPLACE_EXISTSING = &H00000001
        MOVE_FILE_COPY_ALLOWED = &H00000002
        MOVE_FILE_DELAY_UNTIL_REBOOT = &H00000004
        MOVE_FILE_WRITE_THROUGH = &H00000008
        MOVE_FILE_CREATE_HARDLINK = &H00000010
        MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H00000020
    End Enum

    Ensuite, tu déclares une fonction de callback qui sera appelée à chaque fois que la copie progresse, avec la même signature que le delegate CopyProgressRoutine :

    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
    Private Function OnCopyProgress( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
        Dim percent As Double = TotalBytesTransferred / TotalFileSize
        Console.WriteLine("{0:P}", percent)
     
        Return CopyProgressResult.PROGRESS_CONTINUE
     
    End Function

    Et enfin tu peux appeler MoveFileWithProgress :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim result As Boolean = MoveFileWithProgress(source, destination, AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
    Après il faut jouer sur les paramètres si tu veux modifier le comportement... Je te laisse regarder la doc pour voir ce dont tu as besoin exactement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour,

    j'ai trouvé un code sur internet censé pouvoir copier un fichier tout en faisant evoluer le progressbar
    or une fois que je met ce code sous micorsoft visual basic 2010
    il me signale une erreur au niveau de la fonction et me dit que
    La fonction copyprogress ne retourne pas une valeur pour tous les chemins du code. Une instruction 'Return' est t'elle manquante?
    Si quelqu'un pouvait m'aider

    merci

    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
    Private Delegate Function CopyProgressRoutine(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
     
    Private Declare Auto Function CopyFileEx Lib "kernel32.dll" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As CopyProgressRoutine, ByVal lpData As Int32, ByVal lpBool As Int32, ByVal dwCopyFlags As Int32) As Int32
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim copyError As Exception = New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error)
    Dim cpr As New CopyProgressRoutine(AddressOf CopyProgress)
    CopyFileEx("C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll", "C:\dao360_delete.dll", cpr, 0, 0, 0)
     
    End Sub
     
    Private Function CopyProgress(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
    ProgressBar1.Value = Convert.ToInt32(totalBytesTransferred / totalFileSize * 100)
     
    End Function

  4. #4
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Bonsoir,

    Tu déclare une fonction qui est censé retourné un Int32
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Delegate Function CopyProgressRoutine(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
    Hors dans ton code, ta fonction ne retourne rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Function CopyProgress(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
    ProgressBar1.Value = Convert.ToInt32(totalBytesTransferred / totalFileSize * 100)
    End Function
    Tu peut voir sur msdn les différentes valeurs à renvoyer : http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    PROGRESS_CANCEL 1 Cancel the copy operation and delete the destination file.

    PROGRESS_CONTINUE 0 Continue the copy operation.

    PROGRESS_QUIET 3 Continue the copy operation, but stop invoking CopyProgressRoutine to report progress.

    PROGRESS_STOP 2 Stop the copy operation. It can be restarted at a later time.
    J'aurais préféré utiliser du code managé pour copié les fichiers et mettre ca dans un Thread pour ne pas bloquer l'interface

  5. #5
    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 : 43
    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 bansan Voir le message
    j'ai trouvé un code sur internet censé pouvoir copier un fichier tout en faisant evoluer le progressbar
    or une fois que je met ce code sous micorsoft visual basic 2010
    il me signale une erreur au niveau de la fonction et me dit que
    C'est à peu près la même chose que ta question de l'autre jour, où je t'ai donné une réponse longue et détaillée pour laquelle tu ne t'es même pas donné la peine de remercier... Franchement, ça donne pas trop envie de t'aider

    A part ça, la réponse de Jerede semble correcte.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Désolé si je ne t'ai pas remercier

    Merci

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Shared Function MoveFileWithProgress( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal lpProgressRoutine As CopyProgressRoutine, _
            ByVal lpData As IntPtr, _
            ByVal dwFlags As MoveFileFlags) As Boolean
     
        End Function

    Sous vb2010 express il me met "end Function" surligné en vert et me dit comme erreur:
    La fonction 'MoveFileWithProgress' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
    Pourquoi?

  8. #8
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Tu as ce warning, car tu as créé une fonction qui renvoie une valeur (ici un Boolean) mais tu ne renvoies aucune valeur (à l'aide d'une instruction Return).

    Or comme le but d'une fonction est "normalement" d'utiliser la valeur de retour, et que tu n'en renvoies pas ça peut poser des problèmes ce que te signale le compilateur.

    Cordialement !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Public Class Form1
     
        Private Shared Function MoveFileWithProgress( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal lpProgressRoutine As CopyProgressRoutine, _
            ByVal lpData As IntPtr, _
            ByVal dwFlags As MoveFileFlags) As Boolean
     
        End Function
     
     
        Private Delegate Function CopyProgressRoutine( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
        Private Enum CopyProgressResult As UInt32
            PROGRESS_CONTINUE = 0
            PROGRESS_CANCEL = 1
            PROGRESS_STOP = 2
            PROGRESS_QUIET = 3
        End Enum
     
        Private Enum CopyProgressCallbackReason As UInt32
            CALLBACK_CHUNK_FINISHED = 0
            CALLBACK_STREAM_SWITCH = 1
        End Enum
     
        <Flags()>
        Private Enum MoveFileFlags As UInt32
            MOVE_FILE_REPLACE_EXISTSING = &H1
            MOVE_FILE_COPY_ALLOWED = &H2
            MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
            MOVE_FILE_WRITE_THROUGH = &H8
            MOVE_FILE_CREATE_HARDLINK = &H10
            MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
        End Enum
     
     
        Private Function OnCopyProgress( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
            Dim percent As Double = TotalBytesTransferred / TotalFileSize
     
     
            Return CopyProgressResult.PROGRESS_CONTINUE
     
        End Function
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim result As Boolean = MoveFileWithProgress("D:\VIDEOS\je.v", "D:\Jeu.v", AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
            MsgBox(CopyProgressResult.PROGRESS_CONTINUE)
        End Sub
    End Class


    j'ai tut essayé mais a priori ca ne marche pas

  10. #10
    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 : 43
    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 bansan Voir le message
    Sous vb2010 express il me met "end Function" surligné en vert et me dit comme erreur:
    La fonction 'MoveFileWithProgress' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
    Tu as bien mis l'attribut <DllImport> au dessus comme dans mon code ? Normalement ça devrait marcher, j'ai testé ce code avant de le poster...

  11. #11
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Qu'est ce qui ne marche pas ?

    Tu m'embrouille avec tes deux sujets, faudrai en supprimer un

  12. #12
    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 : 43
    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 bansan Voir le message
    j'ai tut essayé mais a priori ca ne marche pas
    C'est parce que tu as supprimé les attributs <DllImport> du code que j'avais posté... ils n'étaient pas là pour faire joli

    (suite de la discussion sur le sujet d'origine, sinon on va plus s'y retrouver...)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    si qqun pouvait juste me donner le bon code et ensuite une fois que cela marche, m'expliquer
    ca serait genial...
    ca fait une semaine que je cherche et tourne et retourne les forums ...

    http://khsw.blogspot.com/2005/08/cop...-in-vbnet.html

    Sur ce lien , il donne toutes les etapes, cependant...cela ne fonctionne pas chez moi en tout cas..

    je suis sous vb 2010 express...

    quand j'essaie la solution de tomlev....pareil...je ne sais pas ou cela bug...

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Shared Function MoveFileWithProgress( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal lpProgressRoutine As CopyProgressRoutine, _
            ByVal lpData As IntPtr, _
            ByVal dwFlags As MoveFileFlags) As Boolean
     
        End Function
     
     
        Private Delegate Function CopyProgressRoutine( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
        Private Enum CopyProgressResult As UInt32
            PROGRESS_CONTINUE = 0
            PROGRESS_CANCEL = 1
            PROGRESS_STOP = 2
            PROGRESS_QUIET = 3
        End Enum
     
        Private Enum CopyProgressCallbackReason As UInt32
            CALLBACK_CHUNK_FINISHED = 0
            CALLBACK_STREAM_SWITCH = 1
        End Enum
     
        <Flags()>
        Private Enum MoveFileFlags As UInt32
            MOVE_FILE_REPLACE_EXISTSING = &H1
            MOVE_FILE_COPY_ALLOWED = &H2
            MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
            MOVE_FILE_WRITE_THROUGH = &H8
            MOVE_FILE_CREATE_HARDLINK = &H10
            MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
        End Enum
     
     
        Private Function OnCopyProgress( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
     
            Dim percent As Double = TotalBytesTransferred / TotalFileSize
     
     
            Return CopyProgressResult.PROGRESS_CONTINUE
     
        End Function
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim result As Boolean = MoveFileWithProgress("D:\VIDEOS\MEGAVIDEO - Je le regarde.flv", "D:\MEGAVIDEO - Je le regarde.flv", AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
            MsgBox(CopyProgressResult.PROGRESS_CONTINUE)
        End Sub
     
        Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click
            ProgressBar1.Value = CopyProgressResult.PROGRESS_CONTINUE
        End Sub

  14. #14
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Si tu dis pas le problème, on peut pas t'aider

    puis j'en connais un qui va devenir fou
    Il te répète depuis tout à l'heure de mettre les attributs
    au dessus de la déclaration de tes fonctions non managé comme il le montre ici : http://www.developpez.net/forums/d98...sfert-fichier/

  15. #15
    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 : 43
    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 bansan Voir le message
    si qqun pouvait juste me donner le bon code et ensuite une fois que cela marche, m'expliquer
    J'ai déjà posté un code complet qui marche, il suffit de remplacer le Console.WriteLine par la mise à jour de la ProgressBar

    Citation Envoyé par bansan Voir le message
    quand j'essaie la solution de tomlev....pareil...je ne sais pas ou cela bug...
    Je viens de te dire pourquoi ça marchait pas... mais on a posté presque en même temps, donc tu as peut-être pas vu mon post. Regarde juste au dessus de ton dernier post

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    J'ai bien essayé aussi avec le Dllimport cependant voila ce que cela me marque comme erreur:

    Erreur 1 Le spécificateur d'attribut n'est pas une instruction complète. Utilisez un signe de continuation de ligne pour appliquer l'attribut à l'instruction suivante.

    Etpuis pareil , j'ai le end of function qui est surligné(celui que j'ai souligné)
    et l'erreur est la suivante
    Avertissement 2 La fonction 'MoveFileWithProgress' ne retourne pas une valeur pour tous les chemins de code. Une instruction 'Return' est-elle manquante*?
    Concernant cette ligne qu'il faudrait que je remplace:

    Console.WriteLine("{0}", percent)

    Sachant que je met une progressbar
    Je suis donc censé ecrire: progressbar.value= ....

    C'est ça??

    Merci

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <DllImport("kernel32.dll", SetLastError:=True, EntryPoint:="MoveFileWithProgressW", CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)>
    
        Private Shared Function MoveFileWithProgress( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal lpProgressRoutine As CopyProgressRoutine, _
            ByVal lpData As IntPtr, _
            ByVal dwFlags As MoveFileFlags) As Boolean
        End Function
    
    
      Private Delegate Function CopyProgressRoutine( _
          ByVal TotalFileSize As Int64, _
          ByVal TotalBytesTransferred As Int64, _
          ByVal StreamSize As Int64, _
          ByVal StreamBytesTransferred As Int64, _
          ByVal dwStreamNumber As UInt32, _
          ByVal dwCallbackReason As CopyProgressCallbackReason, _
          ByVal hSourceFile As IntPtr, _
          ByVal hDestinationFile As IntPtr, _
          ByVal lpData As IntPtr) As CopyProgressResult
    
        Private Enum CopyProgressResult As UInt32
            PROGRESS_CONTINUE = 0
            PROGRESS_CANCEL = 1
            PROGRESS_STOP = 2
            PROGRESS_QUIET = 3
        End Enum
    
        Private Enum CopyProgressCallbackReason As UInt32
            CALLBACK_CHUNK_FINISHED = 0
            CALLBACK_STREAM_SWITCH = 1
        End Enum
    
        <Flags()>
        Private Enum MoveFileFlags As UInt32
            MOVE_FILE_REPLACE_EXISTSING = &H1
            MOVE_FILE_COPY_ALLOWED = &H2
            MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
            MOVE_FILE_WRITE_THROUGH = &H8
            MOVE_FILE_CREATE_HARDLINK = &H10
            MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
        End Enum
    
        Private Function OnCopyProgress( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
    
            Dim percent As Double = TotalBytesTransferred / TotalFileSize
            Console.WriteLine("{0:P}", percent)
    
            Return CopyProgressResult.PROGRESS_CONTINUE
    
        End Function
    
        Dim result As Boolean = MoveFileWithProgress(source, destination, AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
    End Class

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Est ce qu'il ne faudrait pas mettre ces 2 ecritures avant de commencer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imports System.Runtime.InteropServices
    Imports System.ComponentModel

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour
    De retour sur mon probleme de code ce matin, j'ai enfin reussi a déplacer un fichier sauf que...je ne vois rien sur la barre de progression...

    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
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Imports System.Runtime.InteropServices
    Imports System.ComponentModel
     
    Public Class Form1
     
     
        <DllImport("kernel32.dll", SetLastError:=True, EntryPoint:="MoveFileWithProgressW", CharSet:=CharSet.Unicode, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Private Shared Function MoveFileWithProgress( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal lpProgressRoutine As CopyProgressRoutine, _
            ByVal lpData As IntPtr, _
            ByVal dwFlags As MoveFileFlags) As Boolean
        End Function
     
     
        Private Delegate Function CopyProgressRoutine( _
            ByVal TotalFileSize As Int64, _
            ByVal TotalBytesTransferred As Int64, _
            ByVal StreamSize As Int64, _
            ByVal StreamBytesTransferred As Int64, _
            ByVal dwStreamNumber As UInt32, _
            ByVal dwCallbackReason As CopyProgressCallbackReason, _
            ByVal hSourceFile As IntPtr, _
            ByVal hDestinationFile As IntPtr, _
            ByVal lpData As IntPtr) As CopyProgressResult
     
        Private Enum CopyProgressResult As UInt32
            PROGRESS_CONTINUE = 0
            PROGRESS_CANCEL = 1
            PROGRESS_STOP = 2
            PROGRESS_QUIET = 3
        End Enum
     
        Private Enum CopyProgressCallbackReason As UInt32
            CALLBACK_CHUNK_FINISHED = 0
            CALLBACK_STREAM_SWITCH = 1
        End Enum
     
        <Flags()>
        Private Enum MoveFileFlags As UInt32
            MOVE_FILE_REPLACE_EXISTSING = &H1
            MOVE_FILE_COPY_ALLOWED = &H2
            MOVE_FILE_DELAY_UNTIL_REBOOT = &H4
            MOVE_FILE_WRITE_THROUGH = &H8
            MOVE_FILE_CREATE_HARDLINK = &H10
            MOVE_FILE_FAIL_IF_NOT_TRACKABLE = &H20
        End Enum
     
        Private Function OnCopyProgress( _
        ByVal TotalFileSize As Int64, _
        ByVal TotalBytesTransferred As Int64, _
        ByVal StreamSize As Int64, _
        ByVal StreamBytesTransferred As Int64, _
        ByVal dwStreamNumber As UInt32, _
        ByVal dwCallbackReason As CopyProgressCallbackReason, _
        ByVal hSourceFile As IntPtr, _
        ByVal hDestinationFile As IntPtr, _
        ByVal lpData As IntPtr) As CopyProgressResult
            Dim percent As Double = TotalBytesTransferred / TotalFileSize
    progressbar1.value = percent
            Return CopyProgressResult.PROGRESS_CONTINUE
     
        End Function
     
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim result As Boolean = MoveFileWithProgress("D:\images.img", "C:\images.amg", AddressOf OnCopyProgress, IntPtr.Zero, MoveFileFlags.MOVE_FILE_WRITE_THROUGH Or MoveFileFlags.MOVE_FILE_COPY_ALLOWED)
     
        End Sub
    End Class

  19. #19
    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 : 43
    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 bansan Voir le message
    J'ai bien essayé aussi avec le Dllimport cependant voila ce que cela me marque comme erreur:

    Erreur 1 Le spécificateur d'attribut n'est pas une instruction complète. Utilisez un signe de continuation de ligne pour appliquer l'attribut à l'instruction suivante.
    Enlève la ligne vide entre l'attribut et la méthode MoveFileWithProgress
    Oui, VB.NET est vraiment un langage de m***e

    Citation Envoyé par bansan Voir le message
    Est ce qu'il ne faudrait pas mettre ces 2 ecritures avant de commencer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imports System.Runtime.InteropServices
    Imports System.ComponentModel
    Juste System.Runtime.InteropServices (après tu as peut-être besoin de System.ComponentModel pour autre chose, mais pour le code que je t'ai filé la 1e devrait suffire il me semble)

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    J a oublié de preciser que pour le test
    je met sur le form un bouton (button1 ) et une barre de progression(progressbar1)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment gérer une Progressbar pendant un CopyFrom ?
    Par greg778 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2005, 15h34
  2. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06
  3. DTS erreur pendant transfert entre 2 bases
    Par jc2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/11/2004, 15h31
  4. [] [Réseau] Transfert fichier sur un FTP
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/02/2003, 17h33
  5. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59

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