|
Jauge Progression CECOPIEFICHIER |
Débuté par Thierry GEANNIN, 19 fév. 2019 14:17 - 4 réponses |
| |
| | | |
|
| |
Posté le 19 février 2019 - 14:17 |
Bonjour
tout est dans le titre, je dois copier des fichiers vers un pda et je souhaiterais avoir une jauge dans ma fenêtre qui permette de suivre la progression.
j'ai testé la procédure gestionprogression mais rien ne se passe.
auriez vous une idée
merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 936 messages Popularité : +53 (65 votes) |
|
Posté le 20 février 2019 - 09:22 |
Bonjour,
ResCopie = ceCopieFichier(cePocketVersPC + ceRécursif, ... "\MesImages\*.*", "C:\MesFichiers\", GestionProgression)
Procedure GestionProgression(TotalOctet, TotalTransmis)
Message("Copie en cours : " + TotalTransmis + " / " + TotalOctet) RENVOYER Vrai
Avez-vous bien défini une barre de messages dans votre fenêtre ??
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 23 messages |
|
Posté le 28 mai 2019 - 19:19 |
Bonjour, moi je dois copier des fichiers de pc a serveur (ou l'inverse). Parfois ils sont tres gros, mais avec la fonction fcopiefichier si j'utilise la fonction <Résultat> = fCopieFichier(<Fichier source> , <Fichier ou répertoire destination> [, <Indicateur de copie>]) avec frjauge c'est la jauge windows.
Or je voudrais utiliser une jauge personnalisee, donc j'essaie d'utiliser la fonction <Résultat> = fCopieFichier(<Fichier source> , <Fichier ou répertoire destination> , <Nom de la procédure> [, <Pointeur> [, <Indicateur de copie>]]) et dans la procedure appelee j'ai bien le nom du fichier source et cible, mais pas la progression en octets
qui peut m'aider? je ne trouve rien sur le forum a ce propos pour copie de pc a pc
-- MAP |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 28 mai 2019 - 20:52 |
Bonjour, Il y a peut être plus simple avec la version 24. En V20 je ferais ainsi
ResAPI est un boolean hndDll est un entier DllName, ExistingFileName, NewFileName est une chaîne
DllName = "Kernel32.dll" ExistingFileName = "D:\Temp\cosmologie_03.m4v" NewFileName = "E:\cosmologie_03.m4v"
hndDll = ChargeDLL(DllName) IF hndDll = 0 THEN Erreur(ChaîneConstruit("Chargement de %1 impossible !", DllName)) RETOUR END
IF fFichierExiste(NewFileName) THEN fSupprime(NewFileName)
ResAPI = API(DllName, "CopyFileExA", &ExistingFileName, &NewFileName, &progressRoutine, Null, False, 0) IF NOT ResAPI THEN Erreur("Echec de la copie...") ELSE Info("Fichier copié.") END
DéchargeDLL(hndDll)
et le code de la procédure pour affichr votre jauge
Procedure progressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, dwStreamNumber, dwCallbackReason, hSourceFile, hDestinationFile, lpData) Trace(StreamSize, TAB, TotalFileSize, TAB, NumériqueVersChaîne((StreamSize*100)/TotalFileSize, "6.2f")) Message modifié, 28 mai 2019 - 21:09 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 30 mai 2019 - 19:17 |
Bonjour, j'avais un peu de temps libre alors voici un peu plus étoffé avec plus de contrôles une méthode possible :
CopyFileEX("D:\Temp\cosmologie_03.m4v", "E:\cosmologie_03.m4v", MaJauge..NomComplet)
La fonction globale (reste à remplacer les RETOUR par des RENVOYER errCode)
Procedure CopyFileEX(ExistingFileName est une chaîne, NewFileName est une chaîne, pJaugeName est une chaîne = "")
ResAPI est un boolean DiskFree, hndDll est un entier lpData est un entier sur 4 octets DllName, TargetDisk est une chaîne JaugeName est une chaîne ASCIIZ sur 512 = pJaugeName
DllName = "Kernel32.dll"
IF NOT fFichierExiste(ExistingFileName) THEN Erreur(ChaîneConstruit("Le fichier : %1, n'existe pas !",ExistingFileName)) RETOUR END
IF fTaille(ExistingFileName) = 0 THEN Info(ChaîneConstruit("Le fichier : %1 est vide !", ExistingFileName)) RETOUR END
TargetDisk = fExtraitChemin(NewFileName, fDisque)
IF NOT fDisquePrêt(TargetDisk) THEN Erreur(ChaîneConstruit("Disque : %1, invalide !", TargetDisk)) RETOUR END
DiskFree = fDisqueInfo(TargetDisk, fdEspaceLibre) IF fFichierExiste(NewFileName) THEN DiskFree += fTaille(ExistingFileName)
IF fTaille(ExistingFileName) > DiskFree THEN Erreur(ChaîneConstruit("Place insuffisante sur le lecteur : %1 !", TargetDisk)) RETOUR END
IF fFichierExiste(NewFileName) THEN IF OuiNon(Non, ChaîneConstruit("Le fichier : %1 existe déjà. Voulez-vous le remplacer par : %2", NewFileName, ExistingFileName)) = Oui THEN IF NOT fSupprime(NewFileName) THEN Erreur(ChaîneConstruit("Impossible de supprimer le fichier : %1", NewFileName)) RETOUR END ELSE RETOUR END END
hndDll = ChargeDLL(DllName) IF hndDll = 0 THEN Erreur(ChaîneConstruit("Chargement de %1 impossible !", DllName)) RETOUR END
IF ChampExiste(JaugeName) _AND_ {JaugeName, indChamp}..Type = typJauge THEN {JaugeName, indChamp}..BorneMax = fTaille(ExistingFileName) {JaugeName, indChamp}..Visible = True lpData = &JaugeName ELSE lpData = Null END
Sablier(True) ResAPI = API(DllName, "CopyFileExA", &ExistingFileName, &NewFileName, &progressRoutine, &JaugeName, False, 0)
IF ChampExiste(JaugeName) _AND_ {JaugeName, indChamp}..Type = typJauge THEN {JaugeName}..Visible = False Sablier(False) IF NOT ResAPI THEN Erreur("Echec de la copie...") ELSE Info("Fichier copié.")
DéchargeDLL(hndDll)
et la procédure globale appelée pour mettre à jour la jauge : Procedure progressRoutine(TotalFileSize est un entier sur 8 octets, TotalBytesTransferred est un entier sur 8 octets,... StreamSize est un entier sur 8 octets, StreamBytesTransferred est un entier sur 8 octets,... StreamNumber est un entier sur 4 octets, CallbackReason est un entier sur 4 octets,... hSourceFile est un entier sur 4 octets, hDestinationFile est un entier sur 4 octets,... lpData est un entier sur 4 octets)
JaugeName est une chaîne = ""
IF lpData <> Null THEN WHEN EXCEPTION IN JaugeName = ChaîneRécupère(lpData, crAdresseASCIIZ) IF ChampExiste(JaugeName) _AND_ {JaugeName, indChamp}..Type = typJauge THEN {JaugeName, indChamp}..Valeur = TotalBytesTransferred END DO END END
IF ToucheEnfoncée(teEchap, False) THEN IF OuiNon(Non, "Arrêt de la copie ?") = Oui THEN RENVOYER PROGRESS_CANCEL ELSE RENVOYER PROGRESS_CONTINUE END
RENVOYER PROGRESS_CONTINUE
Constantes : PROGRESS_CONTINUE = 0 PROGRESS_CANCEL = 1Message modifié, 30 mai 2019 - 19:18 |
| |
| |
| | | |
|
| | | | |
| | |
|