cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010 3 déc. 2007 à 19:45
Tu stockes quoi dans tes variables? Pour copier un fichier il faut le lire par morceaux convenables, comme par ex de 10Ko dans un tableau de Bytes et écrire chaque morceau lus. Pour 1 Go je te déconseille d'utiliser la fonction standart de Vb.
cs_MEGATRIX
Messages postés124Date d'inscriptionjeudi 3 janvier 2002StatutMembreDernière intervention31 décembre 2011 3 déc. 2007 à 20:09
Non pas avec filecopy
comme cela !
'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))
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