Probleme progressBar : capacite depasse

DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012 - 9 févr. 2006 à 17:46
 Profil bloqué - 10 févr. 2006 à 13:24
Bonjours a tous,

J,ai une erreur de capacité depasser avec le code suivant :
'on change la taille restant à copier - soit la taille
'de la source moins la taille déjà copié (destination)
BTest = FSize - LOF(F2)
'on change la valeur de la barre de progression
barre.Value = (100 - Int(100 * BTest / FSize))
Loop Until BTest = 0

Je copie des fichierSSS et j'affiche une progressbar pour la copie de chaque fichier
si je mets cette ligne en commentaire, tout fonctionne numero un. est-ce que quelqu'un a une idée.

Merci
DraaFil

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 févr. 2006 à 18:00
Salut,

Essaye avec ceci :
barre.Value = (100 - CInt(100 * CDbl(BTest) / CDbl(FSize)))

Car il est possible que VB fasse la multiplication 100 * BTest au format integer, et du coup, tu dépasse les 36000 !

_
Avant de poster dans le forum,
Prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx<
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 18:59
ou de le faire autrement:


barre.Value = 100 - BTest / FSize * 100



Daniel
0
DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012
9 févr. 2006 à 19:24
Merci pour vos reponse mias cela fais pareil, voici le code que j'utilise (trouver sur vbfrance mais je sais plus c'est a qui)
'Fonction de copie de fichier en VB v1.0
Function CopyFile(src As String, dst As String, barre As ProgressBar) As Boolean
'le buffer qui contiendra les données lues/écrites
Static Buf As String
'la variable qui contiendra la place disponible (octets)
Dim Free As Long
'variables contenant les tailles des fichiers
Dim BTest As Single, FSize As Single
'variable utilisée dans le cas ou le buffer n'est pas
'utilisé complétement...
Dim Chunk As Integer
'les numeros des fichiers
Dim F1 As Byte, F2 As Byte
'la taille du buffer
Const BUFSIZE = 1024
'la copie n'ayant pas été effectuée
CopyFile = False

'on ouvre les fichiers
F1 = FreeFile
Open src For Binary As F1
F2 = FreeFile
Open dst For Binary As F2

'la taille du fichier source
FSize = LOF(F1)
'la taille restant à copier, soit la même
BTest = FSize

'Ici commence la boucle qui va copier le fichier
Do
'Si la taille restant à copier est inférieure à la
'taille du buffer (fin de fichier), on "adapte" ce dernier
If BTest < BUFSIZE Then
Chunk = BTest
Else
Chunk = BUFSIZE
End If
'le buffer utilisé pour lire/écrire, de taille soit "normale" soit spéciale si < BUFSIZE
Buf = String(Chunk, " ")
'on lit dans la source
Get F1, , Buf
'pour écrire dans la destination
Put F2, , Buf
'permet d'intercepter les touches (éventuel ESC)
DoEvents
'on change la taille restant à copier - soit la taille
'de la source moins la taille déjà copié (destination)
BTest = FSize - LOF(F2)
'on change la valeur de la barre de progression
' barre.Value = (100 - Int(100 * BTest / FSize))
'barre.Value = (100 - CInt(100 * CDbl(BTest) / CDbl(FSize)))
barre.Value = 100 - BTest / FSize * 100

Loop Until BTest = 0
'on boucle tant qu'il le faut, soit tant que la taille restant à copier n'est pas nulle

'puis on ferme les fichiers
Close F1
Close F2

'remet à zéro la barre de progression
barre.Value = 0

'indique la fin, correcte, de copie
CopyFile = True

'et quittons la fonction
Exit Function
End Function

merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 19:44
ton problème vient d'ailleurs.



BTest = FSize - Chunk

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012
9 févr. 2006 à 20:05
ok mias cela functionne sans le progressbar, avez-vous une solution ..

Merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 20:11
j'ai pas compris ???

c'est le LOF(2) qui renvoit n'importe quoi étant donné que le fichier n'est pas fermé







<strike>BTest = FSize - LOF(F2)</strike>

BTest = FSize - Chunk

'on change la valeur de la barre de progression

barre.Value = 100 - BTest / FSize * 100


Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 20:14
sorry



BTest = BTest - Chunk

Daniel
0
DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012
9 févr. 2006 à 21:43
Encore meme probleme!!!

Merci
DraaFil
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 21:58
t'as pas oublié ça:



ProgressBar1.Min = 0

ProgressBar1.Max = 100


nb: j'ai essayé ton code

les 3 méthodes de calcul marche




Daniel
0
DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012
9 févr. 2006 à 22:02
non il sont dans les propriété

je comprend pu si toi sa marche et moi non, ...

Merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 févr. 2006 à 22:24
oui bizarre

je te recopie le tout

quelques petites modifs mineures

taille du fichier à copier limitée à 2 147 483 647





Function CopyFile(src As String, dst As String, barre As ProgressBar) As Boolean

Dim Buf As String

Dim BTest As Long

Dim FSize As Long

Dim Chunk As Long

Dim F1 As Byte, F2 As Byte

Const BUFSIZE = 1024



F1 = FreeFile

Open src For Binary As F1

F2 = FreeFile

Open dst For Binary As F2



FSize = LOF(F1)

BTest = FSize



Do

If BTest < BUFSIZE Then

Chunk = BTest

Else

Chunk = BUFSIZE

End If

Buf = Space$(Chunk)

Get F1, , Buf

Put F2, , Buf

BTest = BTest - Chunk

barre.Value = 100 - BTest / FSize * 100
DoEvents



Loop Until BTest = 0



Close F1

Close F2



barre.Value = 0



CopyFile = True ' la seule valeur possible alors pourquoi ???



End Function

Daniel
0
DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012
9 févr. 2006 à 23:15
Meme probleme, l'ideal il fautdrais que je t'envoie le code par mail (voici mon email : jomoon_1981@hotmail.com

Merci
0
Profil bloqué
10 févr. 2006 à 13:24
Avant d'ouvrir le fichier source faire un test s'il existe avec la fonction Dir
Une fois l'existence du fichir testée, voir si sa taille n'est pas nulle

Function CopyFile(src As String, dst As String, barre As ProgressBar) As Boolean
Dim Buf As String
Dim BTest As Long
Dim FSize As Long
Dim Chunk As Long
Dim F1 As Byte, F2 As Byte
Const BUFSIZE = 1024

if dir(src) = "" then Copyfile= False:Exit Function ' à rajouter
F1 = FreeFile
Open src For Binary As F1
F2 = FreeFile
Open dst For Binary As F2

FSize = LOF(F1)
if FSize = 0 then Copyfile=False:Exit Function ' à rajouter
BTest = FSize

Do
If BTest < BUFSIZE Then
Chunk = BTest
Else
Chunk = BUFSIZE
End If
Buf = Space$(Chunk)
Get F1, , Buf
Put F2, , Buf
BTest = BTest - Chunk
barre.Value = 100 - BTest / FSize * 100
DoEvents

Loop Until BTest = 0

Close F1
Close F2

barre.Value = 0

CopyFile = True

End Function

GRENIER Alain
0
Rejoignez-nous